Published on MuseScore.org

Developers' handbook

    Warning: This guide is accurate for MuseScore version 3.x, but has not been updated for version 4.0 and later. For instructions on building current versions of MuseScore Studio, please see the wiki on GitHub .

    Use the TOC above. Don't mind the broken Outline on the right (if you see one).

    Feel free to adjust any content or add child pages. For more information about how to add pages etc., see the Administrative guidelines.

    Developers of main app use the wiki on github.com now. The main section below still contains useful info.
    Developers of plugins use the plugin section below
    Developers of MuseScore 3.x compatible soundfont use the soundfont section below

    Stay Close

    • Devs often make announcements at the forum Announcements and Development and Technology Preview
    • Latest news, old blog see below
    • Developer group chats

    Events

    • Google Summer of Code
    • Music Hack Day

    Getting started

    • Your first code contribution
    • How to write a good bug report: step-by-step instructions
    • How to use a debug version of MuseScore
    • Command line options
    • Translating MuseScore

    Compilation

    Compile instructions (All Platforms)

    • Compile instructions - Windows (Git)
      • Compile instructions (Visual Studio)
      • Compile instructions (MinGW) (deprecated)
        • Qt Creator 4.x compile instructions
      • Compile instructions (Windows - MSVC with Qt Creator)
    • Compile instructions - macOS (Git)
      • Compile instructions (macOS) - Git
    • Compile instructions - Linux/BSD - (Git)
      • Compile instructions (Linux and BSD) - Git
      • Compile instructions (Ubuntu) - Git
      • Compile instructions (Fedora) - Git
        • Compile instructions (Fedora 20) - Git
      • Compile instructions (openSUSE Leap and openSUSE Tumbleweed) - Git
      • Compiling with crash reporter support

    IDE Configuration

    Finding your way around

    • Testing
    • Automated tests
    • Exploring code and data structures
    • Finding crashes
    • Git workflow
    • MuseScore coding rules

    Packaging for different Operating Systems

    • Packaging for Linux and BSD systems (maintainer wishlist)

    UX Design

    • Proposing a change to design
    • Design reviews and responses

    Plugin development

    • Plugins for MuseScore 4.x
    • Plugins for MuseScore 3.x
    • Plugins for MuseScore 2.x
    • Plugins for MuseScore 1.x

    Soundfont, MIDI velocity and instruments.xml

    Useful topics (maybe outdated)

    • Dev blog, outdated, no in use since Jan 2020, latest info visit news
    • Comparison of stable, beta, and development versions
    • Design and implementation
      • MuseScore internal score representation
    • Distribution maintainers
    • Milestones
    • Version information
    • Scrapbook of feature changes and additions (outdated)
    • Design
      • Branding
      • MuseScore product description
      • Design principles
      • Icon set
      • Palette design
      • Relevant art
      • Sandbox
      • Theme
      • Text style guide
      • Website
        • Homepage
      • Workflow
    • Development infrastructure
    • MuseScore roadmap
      • Remarks for MuseScore3, bugs, issues
    • Release history
    • User handbook generation
    • Release check list
    • Developer group chats

    MuseScore 4

    • MuseScore 4.0 support for older operating systems
    • MuseScore 3 features not implemented in MuseScore 4
    • Braille features in MuseScore 4

    • Archive

      • MuseScore 2.2 hit list
      • MuseScore 2.1 hit list

    Credits

    • Meet the MuseScore Contributors

    Release notes

    • 4.3.0, May 7, 2024 (see changelog)
    • 4.2.1, Jan 24, 2024 (see changelog)
    • 4.2.0, Dec 18, 2023
    • 4.1.1, Jul 26, 2023 (see changelog)
    • 4.1.0, Jul 12, 2023
    • 4.0.2, March 13, 2023 (see changelog)
    • 4.0.1, January 13, 2023 (see changelog)
    • 4.0.0, December 14, 2022
    • Release notes for MuseScore 3.6.2 (February 8, 2021)
    • Release notes for MuseScore 3.6.1 (January 27, 2021)
    • Release notes for MuseScore 3.6.0 (January 14, 2021)
    • Release notes for MuseScore 3.5.2 (October 16, 2020)
    • Release notes for MuseScore 3.5.1 (October 9, 2020)
    • Release notes for MuseScore 3.5.0 (August 6, 2020)
    • Release notes for MuseScore 3.4.2 (February 7, 2020)
    • Release notes for MuseScore 3.4.1 (January 25, 2020)
    • Release notes for MuseScore 3.4.0 (January 24, 2020)
    • Release notes for MuseScore 3.3.4 (December 4, 2019)
    • Release notes for MuseScore 3.3.3 (November 26, 2019)
    • Release notes for MuseScore 3.3.2 (November 14, 2019)
    • (Release notes for MuseScore 3.3.1 (November 13, 2019))
    • Release notes for MuseScore 3.3.0 (October 31, 2019)
    • Release notes for MuseScore 3.2.3 (July 8, 2019)
    • Release notes for MuseScore 3.2.2 (June 30, 2019)
    • Release notes for MuseScore 3.2.1 (June 28, 2019)
    • Release notes for MuseScore 3.2.0 (June 25, 2019)
    • Release notes for MuseScore 3.1.0 (May 28, 2019)
    • Release notes for MuseScore 3.0.5 (March 12, 2019)
    • Release notes for MuseScore 3.0.4 (February 28, 2019)
    • Release notes for MuseScore 3.0.3 (February 26, 2019)
    • Release notes for MuseScore 3.0.2 (January 29, 2019)
    • Release notes for MuseScore 3.0.1 (January 15, 2019)
    • Release notes for MuseScore 3.0.0 (December 24, 2018)
    • Release notes for MuseScore 2.3.2 (July 31, 2018)
    • Release notes for MuseScore 2.3.1 (July 6, 2018)
    • Release notes for MuseScore 2.3 (June 29, 2018)
    • Release notes for MuseScore 2.2.1 (April 3, 2018)
    • Release notes for MuseScore 2.2 (March 27, 2018)
    • Release notes for MuseScore 2.1 (May 2, 2017)
    • Release notes for MuseScore 2.0.3 (April 6, 2016)
    • Release notes for MuseScore 2.0.2 (July 16, 2015)
    • Release notes for MuseScore 2.0.1 (May 5, 2015)
    • Release notes for MuseScore 2.0 (March 23, 2015)
    • Release notes for MuseScore 1.3 (February 28, 2013)
    • Release notes for MuseScore 1.2 (March 14, 2012)
    • Release notes for MuseScore 1.1 (July 27, 2011)
    • Release notes for MuseScore 1.0 (February 4, 2011)
    • Release notes for MuseScore 0.9.6.3 (September 21, 2010)
    • Release notes for MuseScore 0.9.6.2 (August 16, 2010)
    • Release notes for MuseScore 0.9.6.1 (July 12, 2010)
    • Release announcement for MuseScore 0.9.6 (Jun 8, 2010)
    • New features in MuseScore 0.9.5 (Aug 15, 2009)
    • New features in MuseScore 0.9.4 (Feb 6, 2009)
    • MuseScore 0.9.3 released (September 21, 2008)

    Google Summer of Code

    GSoC 2025

    Please note, MuseScore is not taking part in GSoC 2025. Our team is currently busy making large structural improvements to MuseScore's engraving and percussion engines, as well as assisting with Audacity's re-platforming from wxWidgets to Qt, which involves integrating MuseScore's UI components. As such, we feel that we don't have sufficient capacity to mentor any student projects this year.

    We've made no decision yet about future years, but we encourage potential GSoC contributors to consider applying to other open source organizations this year. Any coding experience is good experience!


    Google Summer of Code (GSoC) is a global program that aims to encourage new contributors of open source code. Every year, thousands of GSoC contributors are paid a stipend by Google to complete coding projects with roughly 200 open source organisations like MuseScore. Please see the official Google Summer of Code website for more details, including:

    • GSoC Timeline - start and end dates for applications and projects
    • Contributor Guide - how to apply and participate
    • FAQs - answers to frequently asked questions
    • Discussion Group - announcements and enquiries

    If you want to take part in GSoC with MuseScore then you should familiarise yourself with the information on those pages as well as with our own requirements at MuseScore, which you can read about on the pages listed below.

    Changes for 2022

    As per Google's announcement, this year for the first time:

    • The GSoC program is open to both students and non-students as long as you are at least 18 years old and fairly new to open source. See Google's FAQ for full eligibility requirements.
    • Projects can be medium (~175 hours) or large (~350 hours) in size, usually completed over a period of 12 weeks.
    • The 12 week coding period can optionally be extended by up to 10 weeks (i.e. 22 weeks in total), although this requires approval by both the contributor and their mentor.
      • We will consider extending the deadline to account for time when you are unavailable during the coding period, such as holidays or classes, but we do not advise using the extension as a way to attempt a project that would take you longer than 350 hours to complete. Please be very clear about the expected end date in your proposal(s).

    GSoC with MuseScore

    Information on the following pages is specific to MuseScore.

    Steps toward a successful application

    A lot of information is already available in the GSoC Contributor Guide. Do read it!

    If you like to participate to Google Summer of Code with MuseScore, these are the steps you need to follow to apply:

    • Help us get to know you.
      If you aren't communicating with us before the application is due, your application will not be accepted.

      • Hang out in our Discord Server. Ask questions, show us that you are motivated and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your application to increase the strength of your proposal!
    • Find something that interests you.
      It's critical that you find a project that excites you. You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).
      Don't just tell us how interested you are, show us that you're willing and able to contribute to MuseScore. You can do that by fixing a bug or submitting a pull request well before the deadline, in addition to regularly interacting with MuseScore developers and users on the forum and Discord Server. Our experience shows us that successful GSoC students demonstrate their interest early and often.

    • Prepare your proposal with us.
      By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is in the Discord Server.

    • Complete your application.
      Fill out our application template.
      Only the organization admin and the possible mentors will see this data. You can still edit it after submitting until the deadline!

    Things you'll be expected to know or quickly learn

    MuseScore is mostly written in C++ and use the Qt SDK. In addition to being familiar with C++, successful applicants will be familiar with or able to quickly learn about MuseScore's infrastructure. You can't spend the whole summer learning how to build MuseScore or prepare a changeset and still successfully complete your project.

    • The build system. CMake is used to build MuseScore.
      While you generally don't need to understand too much unless you actually want to change how MuseScore is built, you should be able to understand enough to get a general idea of how to build MuseScore. You must demonstrate that you are able to build the development version of MuseScore from sources before the application deadline. Steps to compile MuseScore are available in the developer handbook.

    • The version control system. We use git and GitHub.
      Git is the distributed version control system (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works.

    • The procedure for contributing changes.
      You will be expected to follow the same procedures as other contributors. You will be helping current and future MuseScore developers by using our standard style for changes, commit messages, and so on.

    • The Developer Group Chat.
      https://musescore.org/en/handbook/developers-handbook/references/develo…
      It's very helpful for new contributors (you) to get immediate feedback on ideas and code.
      Unless your primary mentor has a strong preference for some other method of communication, the Developer Group Chat will likely be your primary means of communicating with your mentor and MuseScore developers.

    • Progress blog.
      If you're selected for the program, you'll be expected to write up progress reports on your own musescore blog. Request activation in the Developer Group Chat. Once activated, you can add a new blog post using https://musescore.org/en/node/add/blog .

    • Related skills.
      In addition, you probably should know some things about music and music notation and be able to read simple music. It's not mandatory and we already had successful students who couldn't but MuseScore is a tool for musicians, most of the developers are musicians too. Also music notation has a specific vocabulary that you should know or learn quickly (staff, stem, chord, beam, slur etc...)

    Criteria by which applications are judged

    These might vary somewhat depending on the mentors and coordinators for a particular Google Summer of Code, but typically the main factors considered would be:

    • Applicant has demonstrated an ability to make substantial modifications to MuseScore.
      The most important thing is that you've contributed some interesting code samples to judge you by.

    • Applicant shows understanding of topic.
      Your application should make it clear that you're reasonably well versed in the subject area and that you researched it before your application and won't need all summer just to read up on it.

    • Applicant shows understanding of and interest in MuseScore development.
      The best evidence for this is previous contributions and interactions.

    • Well thought out, adequately detailed, realistic project plan.
      "I'm good at this, so trust me" isn't enough. You should describe which steps you'll take to implement the feature and how you'll integrate with existing MuseScore code. You should also prepare a full timeline and goals for the midterm and final evaluations.

    Application Template

      GSoC 2025

      Please note, MuseScore is not taking part in GSoC 2025. Our team is currently busy making large structural improvements to MuseScore's engraving and percussion engines, as well as assisting with Audacity's re-platforming from wxWidgets to Qt, which involves integrating MuseScore's UI components. As such, we feel that we don't have sufficient capacity to mentor any student projects this year.

      We've made no decision yet about future years, but we encourage potential GSoC contributors to consider applying to other open source organizations this year. Any coding experience is good experience!


      Please read the "Writing a proposal" chapter from the GSoC Contributor Guide. The full guide is a must read if you want to apply.

      If you would like to get feedback before the deadline:

      1. Write your draft proposal in Google Docs.
      2. Set the sharing permissions to "Anyone with the link can comment" and copy the link.
      3. Check you can access it and type comments/suggestions from within an incognito tab or private browsing window.
      4. Share the link with team-members Peter or Casper via private message in Discord.

      Remember that the draft proposal link does not count as a final submission. You must download the Google Doc as a PDF and upload it to the GSoC Dashboard before the deadline. Google allows you to delete the submitted PDF and upload a new one right up to the deadline, so you should submit something early even if you plan to come back and amend it later.


      About you

      Name and email

      Please provide your full name and email address.

      Discord nickname

      If you frequent our Discord Server please let us know what your nick is. If you don't, then you'd better connect and introduce yourself!

      MuseScore.org and GitHub profile links

      Please include links to these profiles. To save us time, you should also include a link to your GitHub pull requests for MuseScore. For example:

      MuseScore.org profile: https://musescore.org/en/user/57401 (shoogle)
      GitHub profile: https://github.com/shoogle
      MuseScore PRs: https://github.com/musescore/MuseScore/pulls/shoogle

      Please note that your musescore.ORG profile has a different URL to your musescore.COM profile. We need the .ORG profile link. You can find this by visiting https://musescore.org/user and copying the URL this redirects to (if you are logged in).

      Links to evidence (optional)

      If you have any web pages you'd like us to know about, please include links to them. These could be:

      • A website, blog, or YouTube channel that you run
      • A repository on GitHub that you own or manage
      • An impressive pull request that you submitted to us or another open source project
      • An interesting music/programming/design discussion thread that you participated in

      Don't worry if you feel you have nothing to show here. The main things we are looking for is at least one non-trivial pull request on MuseScore's repository and some activity in the Discord Server.

      Remember, to be eligible to participate you must be a student or a beginner. If you're not a student, and you already make non-trivial open source contributions on a regular basis, this would make you ineligible to participate as a GSoC contributor.

      Bio

      Tell us a bit about you, such as:

      • What are you studying and where, or if you are in work what is your job?
      • What activities do you enjoy?
      • What is your experience with MuseScore or other music notation software?
      • What code development projects have realized, music or otherwise?
      • Are you a musician? Which instrument(s) do you play or vocal parts do you sing?

      About the project

      Synopsis

      A short description of the project.

      SIze and Duration

      Do you consider the project to be medium (~175 hours) or large (~350 hours) in size? We may ask you to change this if we disagree. Please note that the project size cannot be changed after the proposal submission deadline. We will not select your project if we feel the requested size is inaccurate.

      Do you expect to complete the project within the standard 12 week period or do you anticipate needing extra time? Google allows projects to be extended by up to 10 weeks (i.e. total length of 22 weeks). The extension can be granted during the project if necessary, but we want to know in advance wherever possible. Please state your reason(s) briefly here (e.g. time off for vacation, work, classes, coursework, etc.) and then elaborate on this in the Schedule section if required.

      Benefits to MuseScore

      Describe how your project will benefit MuseScore. How will it benefit musicians using MuseScore to create scores? Will it be an aid for future MuseScore development?

      Deliverables

      Provide a user-level summary of the final output or results of your project. What does it look like? How do users interact with it? How does it cooperate with the rest of MuseScore's features?

      There might not be time for everything so try to identify what is essential and what could be left for optional stretch goals at the end of the project. What would the MVP (minimum viable product) look like? Would it be ready for end users straight away, or is it just the beginnings of a system that would require further development beyond the end of your project?

      Schedule

      How long will the project take? When can you begin work? Include an estimated timeline of the project with mini-milestones. Please number the weeks during the coding period and give each Monday's date as the week beginning:

      Week 1 - 13th June
      Do research. Get familiar with code.

      Week 2 - 20th June
      Start implementing feature X.

      Week 3 - 27th June
      Unavailable (vacation).

      Week 4 - 4th July
      Continue implementing feature X.

      The schedule is just an estimate so don't worry if you're not exactly sure how long things will take or what order you will tackle them in. Where possible, try to break the project down into stages that can be merged in separate PRs throughout the project rather than in one big PR at the end.

      The aim is to have your MVP (minimum viable product) ready at the earliest possible stage. If the project turns out to be harder than expected, the MVP might be all you manage to get done, but it should serve as a starting point for future development by the community or internal team (or by you if you stick around!). For this reason, it's a good idea to spend a bit of time tidying and commenting the code as you go along, and writing documentation at the end of the project to aid future development.

      Make sure you note any vacation time or other commitments (e.g. work, classes, coursework, etc.) you expect to have during the project period. Such things may provide valid reasons for requesting an extension in advance. With the exception of fixed dates like the first evaluations, we can allow for some flexibility during the project. However, we will fail GSoC contributors who do not give advance notice of prior commitments or extended periods when they will be unavailable during the coding period.

      Implementation (optional)

      For bonus points, tell us any details you can about how you would actually implement the project in the code. You could:

      • Mention some files and classes you expect to create/edit/remove as part of your project.
      • Describe an algorithm that you will have to implement.
      • List any libraries or resources that you might need to include, and explain why you chose them over alternatives.
      • Create a simple UML diagram or flowchart to illustrate how different areas of code will interact.

      This really is a bonus section so make sure you have completed everything else first and sought feedback from us before doing any work on this section.

      Conclusion

      Why is this the right project for MuseScore and why are you the right person for this project?

      Google Summer of Code 2023

        Adding Ideas to this Page

        GSoC applicants should discuss potential ideas with the team in MuseScore's Discord Server before adding them to this page. Introduce yourself in the #gsoc channel and please post your questions there whenever possible, but you may send a direct message to a mentor, or to our community ambassador Peter Jonas, if there is something you want to keep private from other contributors.

        GSoC Contributors

        You don't have to do one of the ideas listed on this page; you can suggest your own. Always speak to a team member first to check that it would be manageable before you begin writing a proposal.

        Mentors

        In order to meet Google's requirements, only experienced developers who are familiar with MuseScore's code are eligible to mentor projects for GSoC. Please speak to us if you are interested.

        Community

        Everybody is welcome to suggest ideas to the team. Once the projects have started you can follow the progress of the students and offer constructive feedback.

        Process

        If your application is successful, the first step will be to have an initial meeting with one of the internal designers as well as your mentor (who will make contact with you). The designer and mentor will provide an initial specification that will outline all aspects of the desired functionality (core feature, accessibility, associated shortcuts, etc.). This specification will then be discussed and potentially revised to ensure that the scope of the project is not too large. Throughout the process of development, you will be encouraged to share updates with relevant team members to ensure that your work receives testing, development advice and design support.


        Project Ideas


        Palettes UX / UI improvements

        The palettes section in MuseScore 4 has been improved a lot in recent years but still needs a lot of additional refinement. In particular, there are some very obvious UX and UI improvements that would benefit the vast majority of users. See this quick explainer video to get an idea.

        Palettes.png

        Here are a few improvements that would be ideal to solve as part of this project. Please note the exact UX interactions will be specified by a designer in advance.

        • Articulations - to be made to work like the articulations in the note input bar
        • Dynamics - you can select one dynamic and replace it with another
        • Hairpins: you can select a hairpin and replace it with another
        • Accidentals: follow the same logic as the accidentals in the Note Input bar, including triggering the appropriate sounds
        • General - when an item is selected on the score, it is selected in palettes too
        • General - when selecting an element on the score, it can be removed by selecting the same element again from the palettes menu
        • General - when selecting an element on the score, it can be replaced by selecting an element from the same category in palettes

        Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

        Possible extensions: spell-checking, automatic hyphenation, verse extraction.

        • Difficulty: Medium
        • Time: ~350 hours
        • Skills: C++, Qt, QML, design
        • Suggested by: Martin Keary (@Tantacrul)
        • Design support: Bradley Kunda (@bradleykunda)
        • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

        Floating Text Widget / UI improvements

        A small widget that would contain all options found currently in the Properties panel, which hovers above selected text on the score. Very much inspired by similar widgets used in word processing applications.

        Floating_Text.png

        Please note the exact UI/UX will be specified by a designer in advance. Apart from developer mentoring, this project will involve close collaboration with our design team and testing support.

        Possible extensions: spell-checking, automatic hyphenation, verse extraction.

        • Difficulty: Medium
        • Time: ~350 hours
        • Skills: C++, Qt, QML, design
        • Suggested by: Martin Keary (@Tantacrul)
        • Design support: Martin Keary (@Tantacrul)
        • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

        Keyboard Navigation

        This project would implement keyboard access in certain parts of the app that currently lack it, and improve it in areas where the current implementation is unintuitive.

        To provide some background, MuseScore 4 has a new 'hierarchical' system of keyboard navigation:

        • Press tab to move focus between control groups (e.g. toolbars and panels).
        • Press the arrow keys to focus individual controls within the group (e.g. buttons in a toolbar).

        This is different to the conventional 'linear' navigation system used in MuseScore 3 and other applications, where the tab key was used to access every individual control in the entire interface.

        The new system is faster since it requires fewer keypresses to get to where you want to go. However, the new system can be disrupted by text fields and other controls that "swallow" arrow key events, meaning that the tab key, rather than the arrow keys, must be used to navigate away from those fields. Furthermore, the new system impedes discoverability because it is no longer possible to access all the controls simply by pressing the tab button alone.

        This GSoC project would adopt a hybrid approach to navigation. The hierarchical system would be used in places where it makes the most sense, such as on the Score tab, where there are many controls and navigation speed is the priority. Meanwhile the traditional "tab to everything" approach would be used in places where discoverability is crucial, such as dialogs.

        A stretch goal for this project would be to implement mnemonic accesses keys for dialog buttons (e.g. Alt+N for Next). Access keys have been implemented in the menus, but not yet in the dialogs.

        • Difficulty: Medium
        • Size: Large (~350 hours)
        • Skills: C++, Qt
        • Suggested by: Peter Jonas (@shoogle)
        • Possible mentor: Peter Jonas (@shoogle)

        Woodwind Fingerings

        Important: The internal team is still considering whether this is viable as a GSoC project. You are allowed to submit multiple proposals, so if you apply for this project idea, we recommend applying for something else too.

        While piano and guitar have easy to notate fingerings using only numbers, most wind instruments still use drawings to represent fingerings. There is currently various plugins that implement in a not-so-user-friendly manner that ability for very few instruments. Some free fonts, like the fiati font (source here, demo here, include glyphs for a lot of instruments. These could be used as a basis (exporting the base diagrams as svg and using them as base). This new fingering element would work very similarly to the existing fretboard diagrams, which means keys could be toggled pressed or not pressed with a click. Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

        • Difficulty: Medium to Hard
        • Time: ~350 hours
        • Skills: C++, Qt, QML, UI design
        • Suggested by: Marr11317
        • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

        Guitar Fretboard

        There currently exists a MuseScore plugin to reveal an interactive guitar fretboard diagram, which can be used as an extra means of entering notes into the score:

        We wish to incorporate this concept as a native feature within MuseScore 4, perhaps using this plugin as a starting point, or alternatively working from scratch. We intend to design some feature improvements, including better note input interaction from the fretboard, as well as transposition features that connect with guitar-specific things like alternate string tunings and capo settings. There will also be the opportunity to work on a new UI styling for the fretboard visualisation itself. Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

        • Difficulty: Medium to Hard
        • Time: ~350 hours
        • Skills: C++, Qt, QML, UI design
        • Suggested by: Bradley Kunda (@bradleykunda)
        • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

        Accessibile Native VST Interface

        This is a UI system that represents all parameters in a given VST using native controls. This provide a backup when the VST interface fails. More importantly, it provides an accessible version of the interface controls. This job requires that all controls in the native VST interface can be accessed via keyboard navigation and is providing the appropriate output the screen readers.

        NATIVE_VST_INTERFACE.png

        • Difficulty: Medium
        • Time: ~350 hours
        • Skills: C++, Qt, AppImage
        • Suggested by: Martin Keary (@Tantacrul)
        • Design support Jessica Williamson
        • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

        AppImage Installer and Updater

        MuseScore's AppImage has command line options to update and install itself, but there is no way to do these things via the GUI. This project would create an update solution for Linux along the lines of the Sparkle and WinSparkle frameworks that MuseScore uses for automatic updates on macOS and Windows respectively. The project would include an install wizard that would offer to integrate the AppImage with the desktop environment (GNOME, KDE, etc.) so that it appears in system menus. While the project would be built primarily for MuseScore, the code would be written and licenced in such a way that other Qt-based AppImage projects could use it too.

        • Difficulty: Medium
        • Time: ~350 hours
        • Skills: C++, Qt, AppImage
        • Suggested by: Peter Jonas (@shoogle)
        • Possible mentor: Peter Jonas (@shoogle)

        Other Ideas

        Check MuseScore 3 features not (yet) implemented in MuseScore 4

        Google Summer of Code 2022

          Adding ideas to this page

          To all students: please discuss potential ideas with the team in MuseScore's Discord Server before adding them to this page. Introduce yourself in the #gsoc channel and please post your questions there whenever possible, but you may send a direct message to a mentor, or to our community ambassador Peter Jonas, if there is something you want to keep private from other contributors.

          GSoC Contributors

          You don't have to do one of the ideas listed on this page; you can suggest your own. Always speak to a team member first to check that it would be manageable before you begin writing a proposal.

          Mentors

          In order to meet Google's requirements, only experienced developers who are familiar with MuseScore's code are eligible to mentor projects for GSoC. Please speak to us if you are interested.

          Community

          Everybody is welcome to suggest ideas to the team. Once the projects have started you can follow the progress of the students and offer constructive feedback.

          Process

          If your application is successful, the first step will be to have an initial meeting with one of the internal designers as well as your mentor (who will make contact with you). The designer and mentor will provide an initial specification that will outline all aspects of the desired functionality (core feature, accessibility, associated shortcuts, etc.). This specification will then be discussed and potentially revised to ensure that the scope of the project is not too large. Throughout the process of development, you will be encouraged to share updates with relevant team members to ensure that your work receives testing, development advice and design support.


          Project Ideas

          Global Shortcuts

          Currently our shortcut system allows users to assign key combinations to a set number of existing functionalities. We want to expand this capability to enable users to select any item in the interface and assign a shortcut to it immediately.

          As a stretch goal, we would also like to create large shortcut 'sets' to help accommodate new users. For example, if a user is coming from Sibelius or Finale, they should be able to select a set that matches the workflow they are accustomed to.
          We have designed the interface and UX to support this feature already.

          Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

          • Difficulty: Hard
          • Time: ~350 hours
          • Skills: C++, Qt, QML, UI design
          • Suggested by: Martin Keary (@Tantacrul)
          • Possible mentor: Peter Jonas (@shoogle)
          • Design support: Martin Keary (@Tantacrul) and Jessica Williamson

          AppImage Installer and Updater

          MuseScore's AppImage has command line options to update and install itself, but there is no way to do these things via the GUI. This project would create an update solution for Linux along the lines of the Sparkle and WinSparkle frameworks that MuseScore uses for automatic updates on macOS and Windows respectively. The project would include an install wizard that would offer to integrate the AppImage with the desktop environment (GNOME, KDE, etc.) so that it appears in system menus. While the project would be built primarily for MuseScore, the code would be written and licenced in such a way that other Qt-based AppImage projects could use it too.

          • Difficulty: Medium
          • Time: ~350 hours
          • Skills: C++, Qt, AppImage
          • Suggested by: Peter Jonas (@shoogle)
          • Possible mentor: Peter Jonas (@shoogle)

          Lyrics Editor

          As described 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.

          The lyrics editor was partially implemented in PR #2326, but this was using the old Qt Widgets (C++) interface for MuseScore 3 and the design was far from optimal. The student would work with the in-house design team to come up with an improved design, and then implement it in the new Qt Quick (QML / JavaScript) interface for MuseScore 4.

          Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

          Possible extensions: spell-checking, automatic hyphenation, verse extraction.

          • Difficulty: Medium
          • Time: ~350 hours
          • Skills: C++, Qt, QML, design
          • Suggested by: Peter Jonas (@shoogle)
          • Possible mentor: Peter Jonas (@shoogle)

          Woodwind fingerings

          Important: The internal team is still considering whether this is viable as a GSoC project. You are allowed to submit multiple proposals, so if you apply for this project idea, we recommend applying for something else too.

          While piano and guitar have easy to notate fingerings using only numbers, most wind instruments still use drawings to represent fingerings. There is currently various plugins that implement in a not-so-user-friendly manner that ability for very few instruments. Some free fonts, like the fiati font (source here, demo here, include glyphs for a lot of instruments. These could be used as a basis (exporting the base diagrams as svg and using them as base). This new fingering element would work very similarly to the existing fretboard diagrams, which means keys could be toggled pressed or not pressed with a click. Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

          • Difficulty: Medium to Hard
          • Time: ~350 hours
          • Skills: C++, Qt, QML, UI design
          • Suggested by: Marr11317
          • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

          Guitar Fretboard

          There currently exists a MuseScore plugin to reveal an interactive guitar fretboard diagram, which can be used as an extra means of entering notes into the score:

          We wish to incorporate this concept as a native feature within MuseScore 4, perhaps using this plugin as a starting point, or alternatively working from scratch. We intend to design some feature improvements, including better note input interaction from the fretboard, as well as transposition features that connect with guitar-specific things like alternate string tunings and capo settings. There will also be the opportunity to work on a new UI styling for the fretboard visualisation itself. Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

          • Difficulty: Medium to Hard
          • Time: ~350 hours
          • Skills: C++, Qt, QML, UI design
          • Suggested by: Bradley Kunda (@bradleykunda)
          • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

          Harp Pedaling

          There currently exists a MuseScore plugin to reveal an interactive harp pedaling interface, which places pedal diagrams on the score:

          Harp_Pedal.jpg

          We wish to incorporate this concept as a native feature within MuseScore 4. The widget will also allow users to enter the text for pedaling as well as diagrams. This project would involve some work on refining the appearance of the diagrams (and text), as they appear on the score. In addition, work should be done to ensure that notes that are currently unplayable are displayed in red. Apart from developer mentoring, this project will involve close collaboration with our design team, who will provide designs and testing support.

          • Difficulty: Medium
          • Time: ~175 hours
          • Skills: C++, Qt, QML, UI design
          • Suggested by: Martin Keary (@Tantacrul)
          • Possible mentor: Casper Jeukendrup (@cbjeukendrup)

          Google Summer of Code 2021

            How to add an idea to this page

            Click the 3 dots button at the top right and "Edit". Copy a project idea from below and update the text with your new idea. Don't forget to remove the mentor's name (unless it's you).

            Everybody is welcome to ideas to the page, but newcomers are encouraged to discuss their idea with developers in MuseScore's Telegram group first. Also have a look at ideas from previous years.

            • Students
              • You don't have to do one of the ideas listed on this page; you can suggest your own. Always speak to us first to check that it would be manageable before you begin writing the application.
            • Mentors
              • In order to meet Google's requirements, only experienced developers who are familar with MuseScore's code are eligible to mentor projects for GSoC. Please speak to us if you are interested.
            • Community
              • Everybody is free to contribute ideas. You are also welcome to follow the progress of the students and offer constructive feedback once the projects are underway.

            Project Ideas

            Global Shortcuts

            Shortcuts.png

            Currently our shortcut system allows users to assign key combinations to a set number of existing functionalities. We want to expand this capability to enable users to select any item in the interface and assign a shortcut to it immediately.

            As a stretch goal, we would also like to create large shortcut 'sets' to help accommodate new users. For example, if a user is coming from Sibelius or Finale, they should be able to select a set that matches the workflow they are accustomed to.
            We have designed the interface and UX to support this feature already.

            • Difficulty: Easy (unless you propose something more difficult)
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Martin Keary (@Tantacrul)
            • Mentor: Vasily Pereversev
            • Design support: Martin Keary (@Tantacrul) and Jessica Williamson

            Hairpin & Dynamics: UX Improvements

            Hairpins.png

            Hairpins are among the most important features in MuseScore. In MuseScore 3, the experience of adding, lengthening and copying/pasting has been improved but the overall task of finessing them remains unfinished.

            This task involved multiple small UX improvements to dragging and snapping behaviour, as well as stretch goals to develop a system where multiple hairpins can be edited at once, and an even stretchier goal where they can be grouped too. The designs for the expected behaviours have been created for this already by our in-house design team. This is a highly collaborative project that will involve iteration based on user-testing conducted by the design team.

            • Difficulty: Easy (unless you propose something more difficult)
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Peter Jonas (@shoogle)
            • Mentor: Vasily Pereversev
            • Design support: Martin Keary (@Tantacrul)

            Accessibility for low vision impairment

            High_Contrast.png

            It is estimated that one in six adults over age 45 has low vision; one in four adults over age 75 has low vision. For this reason, MuseScore 4 was built with a new UI system that allows for very flexible colour themes. In part, this was done to make way for a highly configurable 'High Contrast' theme which allows users to specify the colours and intensity of the MuseScore interface. This would be largely based on the flexibility of the High Contrast capability seen on Windows 10 devices.

            With any remaining time, this task should include a magnification system that allows the user to scale up the size of the MuseScore interface as well as the ability to invert the colours of the score page itself.

            • Difficulty: Easy (unless you propose something more difficult)
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Martin Keary (@Tantacrul)
            • Mentor: Vasily Pereversev
            • Design support: Martin Keary (@Tantacrul)

            Tours

            MuseScore 3 has a Tours facility, which is basically a series of dialogs that point out different parts of the program and teach people how to use them. However, these dialogs can distract users and get in the way of a normal workflow.

            For MuseScore 4, we'd like to improve the Tours feature to make it more helpful and less annoying. This could mean using tooltip-style popups rather than dialogs, integrating tutorials directly into the interface, or another idea suggested by the student. The student would work with their mentor and the internal design team to come up with the best design, implement it, and update it based on testing and user feedback.

            • Difficulty: Easy (unless you propose something more difficult)
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Martin Keary (@Tantacrul)
            • Mentor: Vasily Pereversev

            AppImage Installer and Updater

            MuseScore's AppImage has command line options to update and install itself, but there is no way to do these things via the GUI. This project would create an update solution for Linux along the lines of the Sparkle and WinSparkle frameworks that MuseScore uses for automatic updates on macOS and Windows respectively. The project would include an install wizard that would offer to integrate the AppImage with the desktop environment (GNOME, KDE, etc.) so that it appears in system menus. While the project would be built primarily for MuseScore, the code would be written and licenced in such a way that other Qt-based AppImage projects could use it too.

            • Difficulty: Medium
            • Skills: C++, Qt, AppImage
            • Suggested by: Peter Jonas (@shoogle)
            • Mentor: Peter Jonas (@shoogle)

            Embed Third-Party Documents

            MuseScore allows users to insert images in SVG, PNG and JPEG formats, which can be useful for adding complex notation that is not natively supported. However, there is no convenient way to make changes to these images after they have been inserted in MuseScore. Instead, users must edit the image in an external program, ideally using the original source file (e.g. Inkscape or Adobe Illustrator project file) rather than the image itself.

            We don't want to add complex image editing features in MuseScore, but it would be great to have the option to right-click on an image and choose "Edit with Program X". MuseScore should allow project files for Program X to be embedded directly in the score along with the corresponding SVG, PNG, or JPEG image. When the user chooses to edit the image, Program X would be launched with the project file open in a temporary folder. MuseScore would monitor the project file for changes, and when it is saved, MuseScore would call Program X on the command line to generate a new SVG, PNG or JPEG image to replace the one currently displayed. The new image would be stored in the MSCZ score file along with the newly updated source file for Program X.

            In the future, this process could be generalised to allow embedding third party audio, video, and rich text documents, as well as images. Advanced users might also like to specify their own custom script as both the embedded project file and as the "Program X" used to launch it. We would need to consider security implications very carefully before enabling that particular use case.

            • Difficulty: Medium
            • Skills: C++, Qt
            • Suggested by: Peter Jonas (@shoogle)
            • Mentor: Peter Jonas

            Lyrics Editor

            As described 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.

            The lyrics editor was partially implemented in PR #2326, but this was using the old Qt Widgets (C++) interface for MuseScore 3 and the design was far from optimal. The student would work with the in-house design team to come up with a improved design, and then implement it in the new Qt Quick (QML / JavaScript) interface for MuseScore 4.

            Possible extensions: spell-checking, automatic hyphenation, verse extraction.

            • Difficulty: Medium
            • Skills: C++, Qt, QML, design
            • Suggested by: Peter Jonas (@shoogle)
            • Mentor: Peter Jonas (@shoogle)

            Select/Copy/Paste Improvements

            One of the most long-standing feature requests is to improve copy/paste to allow key and time signature changes, tempo texts, repeats, and other "system" elements to be copied. This would be optional, as sometimes you don't want those things copied. The actual implementation of this is not necessarily all that difficult, but the project would also involve determining a good design for presenting this to the user. This might involve the selection filter, but this too is in some need of redesign work, perhaps finding a way to combine it with the "Select" right-click menu, integrating the ideas of range and list selections, etc.

            • Difficulty: Medium
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Marc Sabatella (@MarcSabatella)
            • Mentor: Marc Sabatella

            Chord Symbol Style Editor

            MuseScore allows you to select from several different options for the display of chord symbols, with some of the details controlled by an XML file. While custom XML files are supported, the process is cumbersome and not documented and really not an option for the average user. We could really use a WYSIWYG chord symbol style editor to allow a user to specify for herself how various chord symbols should be displayed. One was partially implemented many years ago but never incorporated into the program. It was limited in that you needed to specify each and every chord symbol separately - so C7 and C9 needed different customizations, as did C7b9 and C7b5, etc. A good style editor should be more rule-based, building on the semantic structure of a chord symbol and allowing a user to quickly specify rules to be followed by default but also individual overrides for specific chords. Probably at least some of the previous code could be reused.

            • Difficulty: Medium
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Marc Sabatella (@MarcSabatella)
            • Mentor: Marc Sabatella

            Woodwind fingerings

            While piano and guitar have easy to notate fingerings using only numbers, most wind instruments still use drawings to represent fingerings. There is currently various plugins that implement in a not-so-user-friendly manner that ability for very few instruments. Some free fonts, like the fiati font (source here, demo here, include glyphs for a lot of instruments. These could be used as a basis (exporting the base diagrams as svg and using them as base). This new fingering element would work very similarly to the existing fretboard diagrams, which means keys could be toggled pressed or not pressed with a click.

            • Difficulty: Medium to Hard
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Marr11317
            • Possible mentor: Yet to be determined

            Export Metronome Sound

            There have been user requests dating back some time (https://musescore.org/en/node/154666) to add a feature that allows users to export audio with the metronome sound included. The current workaround is to insert some sort of percussion part (ie. wood block) and use it to make a click track. I'm working on a plugin to automate this process for the 3.6.x versions of MuseScore; however, I think there could be an "Export with metronome sound" checkable option implemented in MuseScore 4 when users go to export a score as mp3, ogg, etc.

            • Difficulty: Easy to medium
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Dominic Occhietti
            • Mentor: TBD

            Smart Tempos

            A tempo element is made up of text and/or a metronome marking. Examples:

            • Allegro
            • ♩. = 120
            • Allegro (♩. = 120)

            In MuseScore 3, the entire tempo element is editable text, including the metronome marking, which makes it very easy to create a corrupt tempo that doesn't work during playback. In addition, the "BPM" field in the Inspector always sets the tempo in terms of quarter-notes-per-minute regardless of time signature, rather than using the natural beat unit (e.g. dotted-quarter in 6/8). When a score is saved in MuseScore's MSCX format, the tempo is converted to quarter-notes-per-second for no apparent reason.

            In MuseScore 4, we would like to make the metronome marking separate from the text part of the tempo. In the example above, users would be able to edit the "Allegro" text by double-clicking on it in the score, but the "(♩. = 120)" metronome marking would have to be edited via the Inspector or a special pop-up that would appear when the user single-clicks on a tempo marking in the score. There would be an option to hide the metronome marking to create a purely textual tempo, but the metronome marking would still be used internally for playback purposes.

            Tempo_popup.png

            The metronome marking would be saved in the MSCX file in the form of an equation, such as:

            <Tempo>
                <equationVisible>1</equationVisible>
                <bracket>auto</bracket>
                <text>Allegro <equation>[4.]=120</equation></text>
            </Tempo>

            An advanced implementation would give users the option to edit the equation directly within MuseScore. This could provide a means to enter more exotic tempo markings, such as ones with tuplets in the metronome marking, or multiple notes tied together. This advanced equation syntax could be implemented as an extension if time is available at the end of the project.

            Additional consideration to perhaps support markings as ♩. = ca 100

            • Difficulty: Medium to Hard, depending on how far you get
            • Skills: C++, Qt, QML
            • Suggested by: Peter Jonas (@shoogle)
            • Mentor: Peter Jonas (@shoogle)

            Rubato: ritardando and accelerando

            There have been user requests dating back 10 years for playback of accelerandode and ritardando (#9383: Rubato: ritardando and accelerando).
            There's currently a plugin for this, https://musescore.org/en/project/tempochanges.
            But this should really be a builtin function, similar to crescendo/diminuando.

            • Difficulty: Easy to medium
            • Skills: C++, Qt, QML, UI design
            • Suggested by: many many users
            • Mentor: TBD

            Mixer & Tracks

            Musescore Folder Idea - Other Track Types and Switches.png

            Hello. A while ago, I created a series of descriptions and illustrations suggesting interesting features that could be implemented into Musescore 4's mixer design; the links to those posts are listed below. Since I am not part of the development of Musescore 4, I want to emphasize some assumption that I made when creating these concepts. These assumption includes that MS4 will eventually allow Audio / Midi recordings, importations, and automations; and it will allow 3rd party plugins such as EQs and Compressors.

            *My apologies for writing this post as first person (if not appropriate for this feed); I couldn't come up a different method to authentically address this.

            Comment Links:
            1. Initial Post - https://musescore.org/en/node/305002#comment-1033813
            2. Grouping - https://musescore.org/en/node/305002#comment-1033860
            3. Mini Mixer and Other Tabs - https://musescore.org/en/node/305002#comment-1034079
            4. FX Control - https://musescore.org/en/node/305002#comment-1034352

            • Difficulty: Medium +
            • Skills: C++, Qt, QML, UI design
            • Suggested by: SketalDaz (@SketalDaz)
            • Mentor: TBD
            • Design support: TBD

            Piano Roll Editor

            Important: The internal team is still considering whether this is viable as a GSoC project. You are allowed to submit multiple proposals, so if you apply for this project idea, we recommend applying for something else too.

            MuseScore 3 has a Piano Roll Editor (PRE) that can be accessed by right-clicking on any staff in the score. A piano roll is a simple graph of pitch against time, which is familiar to users of sequencer-type programs. MuseScore's PRE also includes a graph of velocity against time, which is useful for adjusting dynamics. The PRE allows for detailed control of playback without affecting the appearance of notation in the score. The PRE needs to be reimplemented from scratch in QML before it can be ported to MuseScore 4, where it would become the starting-point for a full sequencer implementation sometime in the future.

            The current Piano Roll Editor is poorly designed and overloaded with functionality that is not strictly necessary. The internal team will assist the student in coming up with a new design for MuseScore 4. At a minimum, the new PRE will simply provide viewing of pitch and velocity graphs against time, but no editing capabilities. Ideally, the student would implement editing at least for velocity. Full editing for note duration and pitch would be enabled only if sufficient time is available at the end of the project.

            • Difficulty: Hard
            • Skills: C++, Qt, QML, UI design
            • Suggested by: Peter Jonas (@shoogle)
            • Mentor: Vasily Pereversev
            • Design support: Martin Keary (@Tantacrul) and Jessica Williamson

            Google Summer of Code 2020 Ideas

              Your idea

              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 2020. Don't forget to remove the mentor's name (unless it's you).

              Anybody is welcome to add an idea to the page, but newcomers are encouraged to discuss their idea on the MuseScore developers Telegram channel or via the developer mailing list first. Also check ideas from previous years.

              Students

              If you are a student keen to take part in GSoC, we strongly believe that the best project for you is the one you are most interested in and therefore most willing to do. It doesn't have to be one of the ones listed on this page; you can suggest your own.

              Whichever idea you choose, you should speak to us first to check that it would be manageable before you go to the effort of writing a proposal. This is particularly important if you want to suggest your own project, as we would have to find a suitable mentor.

              Check out the steps toward successful application.

              Mentors

              If you would like to be a mentor for GSoC then feel free to put your name down next to any projects you are interested in and that you think you are qualified to mentor. In order to meet Google's requirements for mentors, only experienced developers with a high level of familiarity with MuseScore's code are eligible. However, non-developers, and developers new to MuseScore, may be able to assist in an advisory role if they have specialist knowledge relevant to the project in question.

              Community

              Everybody is free to contribute ideas. You are also welcome to follow the progress of the students and offer constructive feedback once the projects are underway.

              Post-its for miscellaneous ideas

              One feature that MuseScore currently lacks is the ability to jot down and attach notes (annotations) to scores. Having the ability to attach little annotations of musical ideas to different parts of the main score may be beneficial for composers and musicians, as they can keep track of their thought process and come back to old ideas at their leisure. Perhaps the composer has some ideas for a section of music that might work in the context of the entire piece, but the composer hasn't gotten around to fleshing out the new ideas yet or likes another idea better at the moment.

              Having the ability to attach little notes at different points in the score is a good way to brainstorm. Also, it could help organize things better than having a new project altogether or keeping a separate music notebook and writing down notes there. The post-its could be color coded, broken down into different sections, etc. Instead of creating scores for performance, musicians could create scores just for brainstorming, and gradually transform the score into a final score when they have enough ideas. The post-its could have the ability to contain text and to test different combinations of chord progressions, voice leading, and instrumentation. There could be bullet points for different musical ideas, color coded as the user desires. With "create post-it" mode enabled, the user could click on a particular point in the score and create a post-it there, and from there the user could write some notes in the little pop-up. The user could then close out and reopen the notes by clicking an icon that been created of a little post-it.

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

              Simplified lyric & chord symbols only

              A simplified pop/rock input method for making lyrics & chord symbol (and/or chord tab) only scores, without worrying about a staff, melody or rhythm initially, but which would still could be easily updated to include notated melody with rhythm. Maybe using a minimal slimmed-down interface. And if could import basic ascii charts of lyrics chord symbols.

              Difficulty: Medium
              Skills: C++/Qt
              Possible mentor: @ericfont

              Diatonic instrument definition

              One of the most common requests that is nearly impossible to implement in current versions of MuseScore is diatonic instruments such as the Shamisen and Appalachian Dulcimer. These instruments have a limited number of notes that can be played on a string due to their fret definitions. Current tablature does allow for the limited notes permitted to be played on a string.

              I would suggest the instrument definitions be expanded to allow for detailed frets that can be applied to a given string. The definition should limit the actual note that can be played by the instrument and indicate an error similar to the current method if an illegal note is entered on both the standard and tablature clefs.

              A possible way to do this is to create an interface that allows for defining new instruments to include string and fret definitions as well as individual notes for instruments such as diatonic harmonicas and accordions among others.

              I am not qualified to be a mentor, but I would be more than willing to be a consultant on this project (@mike320), with programming mentoring from @TheOtherJThistle.

              Difficulty: Hard
              Skills: C++/Qt
              Possible mentor: mike320 + James Thistlewood (JThistle/TheOtherJThistle)

              Ornaments maker

              A common request if for proper playback of ornaments, such as turns and trills with accidentals. There needs to be a framework created to allow the user to define an ornament and have it play back properly in MuseScore. One thing you cannot currently do is apply an accidental to an ornament.

              The interface would allow the user to define the ornament, or line in the case of a trill line or prall line, based upon the key of C on a C note. The actual notes played when the ornament is encountered would be a transposition of these notes. So if the user defined a trill with a sharp above it to be played as D#-C-D#-C... (as was done in the baroque era), a trill on an G in a key with 4 or fewer sharps would result in the trill being played as A#-G-A#-G... The user would also be able to define the duration of each note played, allowing in the case of a trill for the notes played to be defined as a set duration such as 16th or 32nd notes according to the requirements of the music. Turns, pralls and so forth should also allow for accidentals to be added under the ornament to allow for defining proper playback of all ornaments used in western music.

              I am not qualified to be a mentor, but I would be more than willing to be a consultant on this project (@mike320), with programming mentoring from @TheOtherJThistle.

              Difficulty: Hard
              Skills: C++/Qt
              Possible mentor: mike320 + James Thistlewood (JThistle/TheOtherJThistle)

              Keyboard real-time input

              Author: @anatoly-os

              I wish we could use keyboard (not MIDI-keyboard) for convenient real time note input. The focus of the project is composers who create music from scratch.

              I will add the video which show the idea later.

              When creating music, we usually have some melody in mind and want to express it with simple combination of notes and its duration. Real time input starts with the default tempo and fills the rests with notes specified by user. It is not necessary to hold letters (A-G) to enter the duration, the input mode fills the beats with the previously added note until rest or following note key will be pressed.

              You still need to use letters to specify a pitch, but duration is set depending on how long you hold the button. It is like you are playing piano, but playing "keyboard" instead. So, there is a metronome, which counts the rythm. And you press and hold buttons to create a melody.

              Difficulty: Medium
              Skills: C++/Qt
              Possible mentor: anatoly-os

              Lyrics editor

              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. A more advanced implementation would use a tree view where each lyrics verse is represented by a branch in the tree.
              Possible extensions: spell-checking, automatic hyphenation, verse extraction.

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

              Palette shortcuts

              Another way to improve palette accessibility (and general usability for all users) is to allow the user to define keyboard shortcuts for individual palette elements. For example, the user might want to press Alt+D to enter a key signature of D major, or Ctrl+T to add a trill, etc. There could be an option to set shortcuts in the context menu that appears when you right-click on a palette. If the user tries to set a shortcut that has already be defined for another palette element then a warning should be displayed. An improved implementation would also check for conflicts with the shortcuts set in the main Preferences dialog. An ideal implementation would allow shortcuts defined anywhere in the program to be dynamically registered with the central list of shortcuts displayed in the main Preferences dialog, so that all shortcuts could be set and unset in one place, and to guarantee that conflicts are avoided (c.f. the Plugin Manager allows the user to define shortcuts to run plugins, but there is no collision detection with shortcuts defined elsewhere).

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

              Command macros

              In some engraving situations, it is useful to apply several commands to a single object. One case like this is if you want to add a end/begin repeat barline. You want to add an end repeat and a start repeat to the same barline. It could be useful to create a framework to allow users to create their own macros stringing more than one command together. A macro can then be applied with a single click or keyboard shortcut.

              • Difficulty Medium
              • Skills C++/Qt
              • Possible mentor: Louis Cloete (@Louis Cloete)

              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)

              Text editing improvements

              Text in frames and elsewhere currently allows for some basic formatting options, but lacks many capabilities one would want in order to do any serious text editing, like to create educational materials with significant text between the musical examples. While we would likely not ever compete with word processors, merely implementing word wrap, justification, and a few other controls could go a long ways toward allowing users to create documents completely within MuseScore.

              • Difficulty: Medium
              • 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, and the staff type change element to change certain properties for individual staves mid-score. 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 change between percussion and pitched on a single staff, 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: Hard
              • Skills: C++/Qt
              • Possible mentor: Marc Sabatella (@MarcSabatella)

              Cross-staff notation improvements

              MuseScore can do cross-staff notation by selecting a note/rest and pressing Ctrl+Shift+Up/Down. However, there're a few limitations.

              • User cannot stretch notes in a single chord to more than one staff: selecting a note and pressing Ctrl+Shift+Up/Down will move the entire chord. The feature request of moving some notes in a chord to another staff while keeping other notes in the original staff was created a long time ago (#14687: Split chord across staves in cross-staff notation), and this kind of notation can be really useful when writing scores for piano and other instruments.
              • Layout collisions between cross-staff notes and other notes sharing the same graphic staff: the layout of notes on the destination staff won't try to avoid cross-staff notes. The ideal situation would be graphically treating the cross-staff notes as if in a second voice, but things can also be a little different. Issues #114141: Notes collide between cross-staff and #293279: Cross-staff notes don't cause existing beams and stems on other stave to avoid it can be a good start for you.
              • No correct playback for cross-staff (and also cross-voice) arpeggio. See #65806: Allow correct playback of cross-staff/voice arpeggios.
              • Cannot move other elements (besides notes/rests) to another staff. See #280156: Add a way to move elements other than notes cross-staff (or do it automatically when notes are moved).

              A complete list of issues related to cross-staff notation can be seen in #285233: [EPIC] Cross-staff notation issues. While working on them, it's necessary to keep backward file compatibility in mind.

              • Difficulty: Medium to Hard, depending on how far you get
              • Skills: C++/Qt (doesn't necessarily involve UI changes, but you have to understand the geometric graphing of score elements)
              • Possible mentor:

              Repeat-related symbols

              The two-measure repeat sign with working playback has been one of the most-requested features ever, as is evident by the number of forum requests and length of this issue #10220: Add a two and four measure (multi-measure) repeat sign with playback at 164 replies and going back 8 years. This project would involve coding various multi-measure and related features, like

              • Two-measure repeat
              • Old style multi-measure rests
              • Repeat previous bar N times markings
              • Automatic counting of repeated measures

              • Difficulty: Medium

              • Skills: C++/Qt
              • Possible mentor:

              Braille export

              This project would add Braille music notation to the list of formats available via File > Export. Prior knowledge of Braille music notation is not required as the basic rules are fairly straightforward and can be picked up in the early stages of the project. As with everything, the specifics of Braille music notation do get quite complicated and can even vary from country to country, so the student would not be expected to implement more than basic export functionality. However, the project would seek to identify the main hurdles that a full implementation would have to overcome, and potentially begin to explore solutions to these problems in the code. A secondary objective is to raise accessibility awareness in the developer community, and to leave behind a clear roadmap for future Braille development that would build on the foundations laid in this project.

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

              More realistic tempo playback

              Having completed single-note dynamics, I've been thinking about ways we can improve playback.

              One thing we could do is to allow the playback of rit. and accel. markings. These would have to be user customisable, for example what tempo to change to and how to interpolate between tempi.

              This isn't just limited to these tempo markings, or even just to tempo markings. If you have any other playback improvement ideas, please let me know. I'm sure we can work to implement them as well.

              I've worked a lot with playback, so I feel like I could mentor this fairly well :)

              • Difficulty: Medium
              • Skills: C++/Qt
              • Possible mentor: James Thistlewood (JThistle/TheOtherJThistle)

              Realistic MIDI sound

              As a composer who would like to use the sounds of MuseScore’s native instruments in the final product, I find it underwhelming that some instruments when transposed become indistinguishable or how multiple percussion instruments share the same sound. Improving and diversifying the sound options of these instrument as well as giving users more freedom to playback with their own sounds would expand music styles used.

              This can be achieved by a small UI window which can read in sound and give the user controls for previewing the sound when it is modulated.

              • Difficulty: Medium
              • Skills: C++/Qt
              • Possible mentor: ???

              Albums

              The one significant feature that MuseScore 2 had and MuseScore 3 lacks are albums. This feature allowed you to build a larger work from multiple smaller ones. It could be used to build a complete sonata, symphony, or suite from several movements, or a songbook from dozens or even hundreds of individual songs. One reason the feature was eliminated is that it was quite limited - for instance, all component scores needed to have the same instrumentation, and the combined score would have only one global style. It was also pretty buggy.

              It's past time to reintroduce this feature into MuseScore 3, and to hopefully improve upon the original implementation.

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

              Tree model for libmscore

              Items in a tree model can have any number of child items, but they always have exactly one parent item (except the root item, which has no parent item by definition). Musical scores follow this model closely: a note's parent is the measure it belongs to, the measure's parent is its staff, and the staff's parent is the score itself. However, the model breaks down for "spanner" elements like ties. Is the tie's parent the note at the start of the tie or the note at the end? This can be resolved by thinking of the tie as two separate elements: a startTie and an endTie, both of which exist in the model, and a link between them that exists outside the model. Sometimes code can ignore the special cases, while at other times it is necessary to check whether an item is a tie before deciding how to handle it.

              Decendants of the "scoreElement" class in libmscore follow the tree model to a certain extent. Every element has a parent element, but there is no generic way to access child elements. For example, you can do element->parent() to get its parent, but you cannot do element->child(n) to get the n-th child. Instead you have to already know what the element and the child are (e.g. chord->stem()). The structure of the score is also different to that described in the previous paragraph. In libmscore, the parent of a measure is the score, not the staff, which limits MuseScore's ability to represent polymeter music (a complex workaround is required). Finally, spanner elements like ties are not treated as described previously, and so fall outside the model. If these issues are corrected then it will massively simplify operations like drawing elements, saving to MSCX (i.e. writing to XML), and handling of polymeter scores. It would also enable us to make use of Qt's item view classes, which provide improved accessibility over the current ScoreView implementation.

              • Difficulty: Medium to Hard (depending on how far you get)
              • Skills: C++/Qt
              • Possible mentor: Peter Jonas (@shoogle)

              Google Summer of Code 2019

                Selected Ideas

                Plugin manager

                Student: songchao → Blog
                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
                • Mentor: Joachim Schmitz (@Jojo-Schmitz)

                Chord symbol playback

                Student: Peter Hieu Vu → Blog

                Playback of chord symbols is a huge can of worms, and MuseScore does not need to be in the business of trying to match the results of iReal Pro or other programs that specialize in generating realistic accompaniment. Still, some basic ability to hear chord symbols would be nice. There has been debate about whether this should actually generate notes on a staff that can be edited or just work in the background, also on what kind of rhythms to use, what kind of voicings, etc. A successful GSoC project would need to be very proactive in getting user input, coming up with a a good design, and then implementing the algorithm.

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

                Improve Instrument Changes

                Student: joshwd36 → Blog

                The main goal of this project is to streamline the process of adding instrument changes. Currently, most of the functionality does exist in MuseScore, but you have to do every step manually. By the end of the summer, I would like the process changing an instrument to simply be to add an instrument change object, and use the instrument change dialog to select the new instrument.
                The end goal is to handle textual hints, transposition and staff type changes automatically based of the chosen instrument.

                • Difficulty: Medium
                • Skills: C++/Qt
                • Mentor: Peter Jonas (@shoogle)

                Palette accessibility

                Student: AnandHemachandran → Blog

                MuseScore's palettes are not accessible to keyboard controls except via the palette search box. This is problematic for users who rely on a screen reader to tell them what is happening on the screen, such as people who are blind or partially sighted. A relatively straightforward solution is to replace each palette with a QListWidget in icon mode, and then enable tab access. However, since each palette is a separate widget, this means a lot of tabbing to get through all of them and back to the searchbox again. A better solution would be to use a QTreeWidget (i.e. a tree view), where the branches are palettes and the leaves are palette elements. However, there is no "icon mode" for tree views in Qt, so there would only be a single column of elements (or a fixed number of columns), which is visually not very efficient. The ideal implementation would make use of Qt's model-view classes, and extend QAbstractItemView to create a "category list view" (i.e. a tree view with an icon mode) where the number of columns is able to change dynamically as the user adjusts the size of the view.

                • Difficulty: Medium to Hard, depending on how far you get
                • Skills: C++/Qt
                • Mentor: Peter Jonas (@shoogle)

                Remaining proposals

                Your idea

                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 2019. Don't forget to remove the mentor's name (unless it's you).

                Anybody is welcome to add an idea to the page, but newcomers are encouraged to discuss their idea on the MuseScore developers Telegram channel or via the developer mailing list first. Also check ideas from previous years.

                Students

                If you are a student keen to take part in GSoC, we strongly believe that the best project for you is the one you are most interested in and therefore most willing to do. It doesn't have to be one of the ones listed on this page; you can suggest your own.

                Whichever idea you choose, you should speak to us first to check that it would be manageable before you go to the effort of writing a proposal. This is particularly important if you want to suggest your own project, as we would have to find a suitable mentor.

                Check out the steps toward successful application.

                Mentors

                If you would like to be a mentor for GSoC then feel free to put your name down next to any projects you are interested in and that you think you are qualified to mentor. In order to meet Google's requirements for mentors, only experienced developers with a high level of familiarity with MuseScore's code are eligible. However, non-developers, and developers new to MuseScore, may be able to assist in an advisory role if they have specialist knowledge relevant to the project in question.

                Community

                Everybody is free to contribute ideas. You are also welcome to follow the progress of the students and offer constructive feedback once the projects are underway.

                Post-its for miscellaneous ideas

                One feature that MuseScore currently lacks is the ability to jot down and attach notes (annotations) to scores. Having the ability to attach little annotations of musical ideas to different parts of the main score may be beneficial for composers and musicians, as they can keep track of their thought process and come back to old ideas at their leisure. Perhaps the composer has some ideas for a section of music that might work in the context of the entire piece, but the composer hasn't gotten around to fleshing out the new ideas yet or likes another idea better at the moment.

                Having the ability to attach little notes at different points in the score is a good way to brainstorm. Also, it could help organize things better than having a new project altogether or keeping a separate music notebook and writing down notes there. The post-its could be color coded, broken down into different sections, etc. Instead of creating scores for performance, musicians could create scores just for brainstorming, and gradually transform the score into a final score when they have enough ideas. The post-its could have the ability to contain text and to test different combinations of chord progressions, voice leading, and instrumentation. There could be bullet points for different musical ideas, color coded as the user desires. With "create post-it" mode enabled, the user could click on a particular point in the score and create a post-it there, and from there the user could write some notes in the little pop-up. The user could then close out and reopen the notes by clicking an icon that been created of a little post-it.

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

                Simplified lyric & chord symbols only

                A simplified pop/rock input method for making lyrics & chord symbol (and/or chord tab) only scores, without worrying about a staff, melody or rhythm initially, but which would still could be easily updated to include notated melody with rhythm. Maybe using a minimal slimmed-down interface. And if could import basic ascii charts of lyrics chord symbols.

                Difficulty: Medium
                Skills: C++/Qt
                Possible mentor: @ericfont

                Diatonic instrument definition

                One of the most common requests that is nearly impossible to implement in current versions of MuseScore is diatonic instruments such as the Shamisen and Appalachian Dulcimer. These instruments have a limited number of notes that can be played on a string due to their fret definitions. Current tablature does allow for the limited notes permitted to be played on a string.

                I would suggest the instrument definitions be expanded to allow for detailed frets that can be applied to a given string. The definition should limit the actual note that can be played by the instrument and indicate an error similar to the current method if an illegal note is entered on both the standard and tablature clefs.

                A possible way to do this is to create an interface that allows for defining new instruments to include string and fret definitions as well as individual notes for instruments such as diatonic harmonicas and accordions among others.

                I am not qualified to be a mentor, but I would be more than willing to be a consultant on this project (@mike320), with programming mentoring from @TheOtherJThistle.

                Difficulty: Hard
                Skills: C++/Qt
                Possible mentor: mike320 + James Thistlewood (JThistle/TheOtherJThistle)

                Ornaments maker

                A common request if for proper playback of ornaments, such as turns and trills with accidentals. There needs to be a framework created to allow the user to define an ornament and have it play back properly in MuseScore. One thing you cannot currently do is apply an accidental to an ornament.

                The interface would allow the user to define the ornament, or line in the case of a trill line or prall line, based upon the key of C on a C note. The actual notes played when the ornament is encountered would be a transposition of these notes. So if the user defined a trill with a sharp above it to be played as D#-C-D#-C... (as was done in the baroque era), a trill on an G in a key with 4 or fewer sharps would result in the trill being played as A#-G-A#-G... The user would also be able to define the duration of each note played, allowing in the case of a trill for the notes played to be defined as a set duration such as 16th or 32nd notes according to the requirements of the music. Turns, pralls and so forth should also allow for accidentals to be added under the ornament to allow for defining proper playback of all ornaments used in western music.

                I am not qualified to be a mentor, but I would be more than willing to be a consultant on this project (@mike320), with programming mentoring from @TheOtherJThistle.

                Difficulty: Hard
                Skills: C++/Qt
                Possible mentor: mike320 + James Thistlewood (JThistle/TheOtherJThistle)

                Keyboard real-time input

                Author: @anatoly-os

                I wish we could use keyboard (not MIDI-keyboard) for convenient real time note input. The focus of the project is composers who create music from scratch.

                I will add the video which show the idea later.

                When creating music, we usually have some melody in mind and want to express it with simple combination of notes and its duration. Real time input starts with the default tempo and fills the rests with notes specified by user. It is not necessary to hold letters (A-G) to enter the duration, the input mode fills the beats with the previously added note until rest or following note key will be pressed.

                You still need to use letters to specify a pitch, but duration is set depending on how long you hold the button. It is like you are playing piano, but playing "keyboard" instead. So, there is a metronome, which counts the rythm. And you press and hold buttons to create a melody.

                Difficulty: Hard
                Skills: C++/Qt
                Possible mentor: anatoly-os

                Lyrics editor

                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. A more advanced implementation would use a tree view where each lyrics verse is represented by a branch in the tree.
                Possible extensions: spell-checking, automatic hyphenation, verse extraction.

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

                Palette shortcuts

                Another way to improve palette accessibility (and general usability for all users) is to allow the user to define keyboard shortcuts for individual palette elements. For example, the user might want to press Alt+D to enter a key signature of D major, or Ctrl+T to add a trill, etc. There could be an option to set shortcuts in the context menu that appears when you right-click on a palette. If the user tries to set a shortcut that has already be defined for another palette element then a warning should be displayed. An improved implementation would also check for conflicts with the shortcuts set in the main Preferences dialog. An ideal implementation would allow shortcuts defined anywhere in the program to be dynamically registered with the central list of shortcuts displayed in the main Preferences dialog, so that all shortcuts could be set and unset in one place, and to guarantee that conflicts are avoided (c.f. the Plugin Manager allows the user to define shortcuts to run plugins, but there is no collision detection with shortcuts defined elsewhere).

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

                Command macros

                In some engraving situations, it is useful to apply several commands to a single object. One case like this is if you want to add a end/begin repeat barline. You want to add an end repeat and a start repeat to the same barline. It could be useful to create a framework to allow users to create their own macros stringing more than one command together. A macro can then be applied with a single click or keyboard shortcut.

                • Difficulty Medium
                • Skills C++/Qt
                • Possible mentor: Louis Cloete (@Louis Cloete)

                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)

                Text editing improvements

                Text in frames and elsewhere currently allows for some basic formatting options, but lacks many capabilities one would want in order to do any serious text editing, like to create educational materials with significant text between the musical examples. While we would likely not ever compete with word processors, merely implementing word wrap, justification, and a few other controls could go a long ways toward allowing users to create documents completely within MuseScore.

                • Difficulty: Medium
                • 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, and the staff type change element to change certain properties for individual staves mid-score. 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 change between percussion and pitched on a single staff, 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: Hard
                • Skills: C++/Qt
                • Possible mentor: Marc Sabatella (@MarcSabatella)

                Repeat-related symbols

                The two-measure repeat sign with working playback has been one of the most-requested features ever, as is evident by the number of forum requests and length of this issue #10220: Add a two and four measure (multi-measure) repeat sign with playback at 164 replies and going back 8 years. This project would involve coding various multi-measure and related features, like

                • two-measure repeat
                • old style multi-measure rests
                • repeat previous bar N times markings
                • automatic counting of repeated measures

                  • Difficulty: Medium
                  • Skills: C++/Qt
                  • Possible mentor:

                Braille export

                This project would add Braille music notation to the list of formats available via File > Export. Prior knowledge of Braille music notation is not required as the basic rules are fairly straightforward and can be picked up in the early stages of the project. As with everything, the specifics of Braille music notation do get quite complicated and can even vary from country to country, so the student would not be expected to implement more than basic export functionality. However, the project would seek to identify the main hurdles that a full implementation would have to overcome, and potentially begin to explore solutions to these problems in the code. A secondary objective is to raise accessibility awareness in the developer community, and to leave behind a clear roadmap for future Braille development that would build on the foundations laid in this project.

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

                More realistic tempo playback

                Having completed single-note dynamics (coming in 3.1, hopefully), I've been thinking about ways we can improve playback.

                One thing we could do is to allow the playback of rit. and accel. markings. These would have to be user customisable, for example what tempo to change to and how to interpolate between tempi.

                This isn't just limited to these tempo markings, or even just to tempo markings. If you have any other playback improvement ideas, please let me know. I'm sure we can work to implement them as well.

                I've worked a lot with playback, so I feel like I could mentor this fairly well :)

                • Difficulty: Medium
                • Skills: C++/Qt
                • Possible mentor: James Thistlewood (JThistle/TheOtherJThistle)

                Guitar griff

                The idea is simple. We want to improve guitar players experience, so we want to show guitar griff with 6 strings and visualise the frets on it. See an example in GuitarPro or TuxGuitar: https://www.youtube.com/watch?v=NU_FRFmJ3D4.

                Screenshot 2019-03-05 at 22.13.03.png

                • Difficulty: Medium
                • Skills: C++/Qt
                • Possible Mentor: anatoly-os/cadiz1

                Realistic MIDI sound

                As a composer who would like to use the sounds of MuseScore’s native instruments in the final product, I find it underwhelming that some instruments when transposed become indistinguishable or how multiple percussion instruments share the same sound. Improving and diversifying the sound options of these instrument as well as giving users more freedom to playback with their own sounds would expand music styles used.

                This can be achieved by a small UI window which can read in sound and give the user controls for previewing the sound when it is modulated.

                • Difficulty: Medium
                • Skills: C++/Qt
                • Possible mentor: ???

                Google Summer of Code 2018

                MuseScore is part of Google Summer of Code (GSoC) 2018! If you are a student and you have aspirations to help improve the open source MuseScore notation software during the summertime, this is a unique opportunity to work together with the MuseScore developers and get paid for it. Learn how GSoC works and read through the student manual

                GSoC

                If you are considering applying, we have a list of ideas you can choose from. We'd love if you apply with your own idea. Don’t hesitate to contact the potential mentors from the ideas list via MuseScore's Join GSoC 2018 forum page, via the developer mailing list, or by chatting on IRC (#musescore on freenode.net, but be aware that mentors aren't awake at all hours of the day). We also have a document listing the Steps Toward a Successful Application, make sure to read it!

                Don't let yourself be scared off by the knowledge prerequisites; you don’t need to be an expert in all domains, and there is some time for learning within the GSoC period. However, familiarity with Qt/C++ and interest in music and music notation will be helpful. If you still have doubts, read Am I good Enough?

                Resources:

                • Application Template
                • GSoC 2018 official website
                • GSoC Student Guide
                • MuseScore developer handbook
                • Ideas for GSoC 2018
                • Steps Toward a Successful Application

                Ideas 2018

                  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 ???

                  GSoC 2018 Student Guide

                    What to do if you have been accepted as a student for Google Summer of Code 2018?

                    Create and write a blog

                    • We will set up a blog for you on musescore.org. Come discuss the details with us (@lasconic / @thomasbonte) on IRC.
                    • Start posting immediately. Begin with a description of your project. You can click here to post in your blog.
                    • Announce your blog, your Git account, and a description of your project on musescore.org
                    • You must write a status report every week. The first weekly report is due on Sunday, May 20 2018 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval. Don't be shy and feel free to post on your blog before this date.
                    • Be online on IRC #musescore on freenode.net as often as possible and interact with your mentor publicly.

                    Suggested sections for the status report are:

                    • Key accomplishments last week
                    • Key tasks that stalled
                    • Tasks in the upcoming week

                    Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

                    Use IRC, the mailing list, and the forums

                    • Introduce yourself on the Tech Preview forum. Include the link to your blog and Git repository there.
                    • Describe your project in short.
                    • Get an IRC client and connect as often as possible to the #musescore channel on freenode.net. If you need help getting on IRC, ask on the mailing list.

                    All your technical questions should go through the forum or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

                    Ask questions in public

                    We're an open community so unless you have a good reason, all communication should be public. Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor. If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

                    Publish a Git repository

                    • Publish your changes immediately in your Git repository.
                    • You have to use github.com for sharing code. See Git Workflow.
                    • State the location of your Git repository on mscore-developer mailing list and your blog.
                    • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see (and if possible, merge) your code continuously!
                    • Every commit should contain a single change, and the code should be working on every commit. Try to prevent huge breakages.
                    • When you feel you've reached a point where part of your code should be merged to main repository, just open a pull request on GitHub or tell your mentor.

                    Benefit from the Community Bonding Period

                    • Familiarize yourself with MuseScore's code base.
                    • Contact your mentor and establish a plan for the upcoming weeks.

                    Be active

                    • Be active; don't expect to be kicked and taken by the hand on every step.
                    • Write weekly reports on time.
                    • Submit your code early.
                    • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

                    Don't forget documentation and tests

                    All new functionality you create should be documented and tested. The documentation and tests should be done as you code—do not wait until the last moment.

                    After the summer

                    Hopefully, your involvement with MuseScore will continue after GSoC!

                    Links

                    • The DOs and DON’Ts of Google Summer of Code: Student Edition - Some tips for students who want to take part in GSoC
                    • MuseScore Coding Rules - Guidelines about coding for MuseScore
                    • Git Workflow

                    License

                    This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

                    Google Summer of Code 2017

                    Update: Google Summer of Code 2017 is over. Read about an intermediate state of GSoC 2017 (a final report hasn't been written).


                    MuseScore is part of Google Summer of Code (GSoC) 2017! If you are a student and you have aspirations to help improve the open source MuseScore notation software during the summertime, this is a unique opportunity to work together with the MuseScore developers and get paid for it. Learn how GSoC works and read through the student manual

                    GSoC

                    If you are considering applying, we have a list of ideas you can choose from. We'd love if you apply with your own idea. Don’t hesitate to contact the potential mentors from the ideas list or contact us via IRC (#musescore on freenode.net), via the developer mailing list. We also have a document listing the Steps Toward a Successful Application, make sure to read it!

                    Don't let yourself be scared off by the knowledge prerequisites; you don’t need to be an expert in all domains, and there is some time for learning within the GSoC period. However, familiarity with Qt/C++ and interest in music and music notation will be helpful. If you still have doubts, read Am I good Enough?

                    Resources:

                    • Application Template
                    • GSoC 2017 official website
                    • GSoC Student Guide
                    • MuseScore developer handbook
                    • Ideas for GSoC 2017
                    • Steps Toward a Successful Application

                    GSoC 2017 Student guide

                    What to do if you have been accepted as a student for Google Summer of Code 2017?

                    Create and write a blog

                    • We will set up a blog for you on musescore.org. Come discuss the details with us (@lasconic) on IRC.
                    • Start posting immediately. Begin with a description of your project. You can click here to post in your blog.
                    • Announce your blog, your Git account, and a description of your project on musescore.org and on the developer mailing list.
                    • You should write a status report every week. The first weekly report is due on Sunday, June 4 2017 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval. Don't be shy and feel free to post on your blog before this date.
                    • Be online on IRC #musescore on freenode.net as often as possible and interact with your mentor publicly.

                    Suggested sections for the status report are:

                    • Key accomplishments last week
                    • Key tasks that stalled
                    • Tasks in the upcoming week

                    Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

                    Use IRC, the mailing list, and the forums

                    • Subscribe to the mscore-developer mailing list if you have not already done so.
                    • Introduce yourself. Include the link to your blog and Git repository there.
                    • Describe your project in short.
                    • Get an IRC client and connect as often as possible to the #musescore channel on freenode.net. If you need help getting on IRC, ask on the mailing list.

                    All your technical questions should go through this mailing list or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

                    Ask questions in public

                    We're an open community so unless you have a good reason, all communication should be public. Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor. If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

                    Publish a Git repository

                    • Publish your changes immediately in your Git repository.
                    • You have to use github.com for sharing code. See Git Workflow.
                    • State the location of your Git repository on mscore-developer mailing list and your blog.
                    • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see (and if possible, merge) your code continuously!
                    • Every commit should contain a single change, and the code should be working on every commit. Try to prevent huge breakages.
                    • When you feel you've reached a point where part of your code should be merged to main repository, just open a pull request on GitHub or tell your mentor.

                    Benefit from the Community Bonding Period

                    • Familiarize yourself with MuseScore's code base.
                    • Contact your mentor and establish a plan for the upcoming weeks.

                    Be active

                    • Be active; don't expect to be kicked and taken by the hand on every step.
                    • Write weekly reports on time.
                    • Submit your code early.
                    • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

                    Don't forget documentation and tests

                    All new functionality you create should be documented and tested. The documentation and tests should be done as you code—do not wait until the last moment.

                    After the summer

                    Hopefully, your involvement with MuseScore will continue after GSoC!

                    Links

                    • The DOs and DON’Ts of Google Summer of Code: Student Edition - Some tips for students who want to take part in GSoC
                    • MuseScore Coding Rules - Guidelines about coding for MuseScore
                    • Git Workflow

                    License

                    This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

                    Ideas 2017

                    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 "Edit" above, then copy and paste an idea below and change the text with your new idea for GSoC 2017

                    Crash reporting

                    MuseScore currently doesn't have any crash reporting facility. It would make the job of developers a lot easier if we could gather crash logs in a web interface. The first target would be Windows but the crash reporting system should be cross platform. MuseScore's development infrastructure would need to be updated accordingly.

                    We could use the Google Breakpad project as a basis, also check Crashpad since breakpad has problem on OSX (Chromium uses crashpad).
                    Breakpad is only part of a crash reporting system, and it doesn't offer a reporting mechanism or a client UI (only has manual tools for decoding crash dumps on Linux). For a server, see Mozilla's Socorro (Python) or Atom's mini breakpad server (Nodejs).

                    Other interesting resources:

                    • Qt and breakpad dev notes
                    • libcrashreporter-qt as used by Tomahawk player.
                    • LibreOffice blog

                    • Difficulty: Medium to high

                    • Skills: C++/Qt, Web technology and basic server administration skills
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Timeline

                    When a score is growing, it's sometimes hard to know where you are located in the score, which part you worked on already etc... The idea would be to create a new panel, potentially to replace the navigator, which gives an abstract view of the score, showing squares for each measure on each instrument, with a different color if the measure is empty or not. Potentially, having one row for rehearsal mark, for tempo markings, time signatures, key signatures etc...
                    Timeline

                    • Difficulty:Medium to Hard
                    • Skills: Qt
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Keyboard layout and shortcut management

                    Many shortcuts in MuseScore do have conflicts due to different international keyboard layouts. Example of such a conflict can be found with the French keyboard. To solve this problem, MuseScore needs a system which can detect the client keyboard layout and auto select the appropriate shortcut list. The developer challenge is to make this work for all international keyboard and if needed create for each of them a custom shortcut list. Additional challenges are the differences between Mac OS X and Windows/Linux. See #47361: [Mac OS X] Insert measure keyboard shortcut doesn't exist More related issue: * http://musescore.org/en/node/48846

                    • Difficulty: Medium
                    • Skills: Qt
                    • Possible mentor: Nicolas Froment (@lasconic)

                    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:

                    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, etc. 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)

                    Accessibility

                    Largely as a result of work done in a previous GSoC, MuseScore can be used to some extent by blind users via keyboard control and screenreader feedback. See https://musescore.org/en/node/37476 for more information on what is currently possible. Mostly, one can navigate existing scores; most of the editing facilities still require use of a mouse which is not an option for blind users. There is still a lot of work that needs to be done before blind users can take full advantage of MuseScore. These include making the palettes fully keyboard accessible, also making it possible to access all score elements (including text, articulations, and other markings) via keyboard only. These enhancements will also benefit sighted users who prefer the keyboard for efficiency.

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

                    Lyrics editor

                    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.

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

                    Timeline

                    Introduction

                    The timeline was developed as part of the Google Summer of Code 2017. It was developed to be implemented in the next major release which is expected to be called MuseScore 3.0.

                    Overview

                    The timeline is a navigation tool that displays an abstraction of the score to the order of measure numbers and instrument names. There are four parts to the timeline:

                    Meta labels

                    This is found in the top left corner of the timeline. These are the names of the meta rows.

                    Instrument labels

                    This is found in the bottom left corner of the timeline. These are the names of the rows in the main grid.

                    Meta rows

                    This is found in the top right corner of the timeline. These hold the meta values of the score.

                    Main grid

                    This is found in the bottom right corner of the timeline. This holds multiple 'cells' (a specific measure and staff in the score represented as a square)

                    Meta

                    Meta are elements found on the score that are not notes, but are still important to the score (key signature, time signature, tempo, rehearsal marks, bar lines, and jumps and markers).
                    handbooktimeline.PNG

                    Basic interaction

                    Select a measure

                    To select a measure in the timeline, press the mouse button on the cell. A blue box will appear around the selected cell and the respective measure in the score will be selected. The score view will place the selected measure in view.

                    Select multiple measures

                    Drag selection

                    Holding [Shift] and holding the left mouse button and dragging the mouse over the main grid will create a selection box. Upon releasing the mouse button, all the cells underneath the selection box will be selected, as well as all the measures in the score.

                    [Shift] selection

                    If a cell is already selected, holding [shift] and selecting another cell in the timeline will stretch the selection to that new cell, similar to how the score does

                    [Ctrl] selection

                    If no cells are currently selected, holding [Ctrl] and selecting a cell will select the entire measure

                    Clearing selection

                    To clear selection, holding [Ctrl] and clicking anywhere on the grid or the meta rows will clear any current selection.

                    Meta values selection

                    Selecting the meta values on the timeline will attempt to select the respective meta values in the score.

                    Scrolling

                    Standard scrolling

                    Scrolling the mouse wheel up or down will move the grid and instrument labels down or up respectively. The meta labels and rows do not move.

                    [Shift] scrolling

                    Holding [Shift] and scrolling the mouse wheel up or down will move the grid and meta rows left or right respectively. The meta labels and instrument labels do not move.

                    [Alt] scrolling

                    Holding [Alt] and scrolling the mouse wheel up or down will move the grid and meta rows left or right respectively, faster than [Shift] scrolling. The meta labels and instrument labels do not move.

                    Dragging

                    To drag the contents of the timeline, hold the left mouse button and move it around.

                    Labels interaction

                    Rearranging meta labels

                    All meta labels besides the measures meta may be rearranged in any way. By moving the mouse cursor onto one of the meta labels, small up and down arrows will appear. Click the left mouse button on the up arrow to swap the meta label with the one above it. Click the left mouse button on the down arrow to swap the meta label with the one below it.

                    Collapsing the meta labels

                    In order to hide all the meta labels while keeping all the meta information on the timeline, there is an arrow that appears on the measures meta when the mouse is over it. Click the left mouse button on the large up arrow to collapse all the currently visible meta rows into one row, where the meta values are staggered in that row. Click the left mouse button on the large down arrow to expand the meta rows again.
                    collapsedmetahandbook.PNG

                    Hiding instruments

                    All instruments--hidden or not--will be displayed on the timeline. To start this interaction, the mouse cursor is moved over an instrument label. A small eye will appear on the right side of the label that is open if the instrument is visible on the score, and closed if the instrument is hidden. Click the left mouse button on the eye to toggle between the two options.
                    hiddeninstrumenthandbook.PNG

                    Zooming

                    To zoom in or out of the score, hold [Ctrl] and scroll the mouse wheel up or down respectively.

                    Context menus

                    To bring up a context menu, right click on the timeline. There are three context menus found in these locations: meta labels, instrument labels, and meta rows.

                    Meta labels context menu

                    Upon clicking the right mouse button on the meta labels, a context menu appears that displays all possible meta labels as well as two options: "Hide all" and "Show all." Next to each meta label in the menu, there is a check box that shows if the meta label is currently being shown on the timeline. To show or hide one of the meta labels, select the box of the meta label in the context menu. Selecting "Hide all" will hide all meta labels except for the measures meta. Selecting "Show all" will display all meta labels.

                    Meta rows context menu

                    Clicking the right mouse button on the meta rows will display the same context menu as the meta labels.

                    Instrument context menu

                    Clicking the right mouse button on the instrument labels will display a context menu with the option to "Edit Instruments." Selecting this will bring you to the same dialog as Edit->Instruments... or pressing 'I' for the shortcut.

                    upload
                    Attachment Size
                    handbooktimeline.PNG 16.26 KB
                    collapsedmetahandbook.PNG 4.61 KB
                    hiddeninstrumenthandbook.PNG 12.82 KB

                    Google Summer of Code 2016

                    Update: Google Summer of Code 2016 is over. Read all about the results of GSoC 2016.


                    MuseScore is part of Google Summer of Code (GSoC) 2016!

                    Capture d'écran 2016-03-01 09.48.11.png.

                    Applications are now over and Google announced the selected students. MuseScore has 4 students.

                    Improving default playback

                    Johannes Wegener (hpfmn) will improve the default playback of MuseScore by updating our SF2 synthesizer (Fluidsynth) and improving our new SFZ synthesizer (Zerberus). Goals are updating fluidsynth to include features and fixes that went into upstream since the fork, adding legato support to fluidsynth (likely via Midi CC68), adding midi CC11 support to midi rendering (for rendering single note/chord (de)crescendo) and overall add a lot more opcodes to zerberus (mainly looping support and ADSR). Johannes will be mentored by Werner Schweer (wschweer).

                    Johannes' fork of MuseScore on GitHub: https://github.com/hpfmn/MuseScore
                    Johannes' blog for GSoC 2016: https://musescore.org/en/user/527826/blog/

                    Semi-Realtime MIDI note entry

                    Peter Jonas (shoogle) will implement a new method of entering notes into MuseScore via computer/MIDI keyboard that is more natural to musicians than the existing “step-time” method. The new method will allow the user to play the piece into the computer as though they were giving a live performance, with additional steps taken to ensure the accuracy of the resulting notation. This should make the process of entering notes significantly faster. Peter will be mentored by Nicolas Froment (lasconic).

                    Peter's fork of MuseScore on GitHub: https://github.com/shoogle/MuseScore
                    Peter's blog for GSoC 2016: https://musescore.org/en/user/57401/blog

                    Annotations

                    Ruchit Agrawal (shredpub) will add tools to enable annotations within a score in MuseScore. These annotations could be textual or graphical, and would be very helpful in music education settings as well as for practice purposes. His will be mentored by Marc Sabatella.

                    Ruchit's fork of MuseScore on GitHub: https://github.com/shredpub/MuseScore
                    Ruchit's blog for GSoC 2016: https://musescore.org/en/user/61850/blog

                    GSoC 2016: voice to part tool and extended Implode/Explode tool

                    Felix Brauchle (fbrauchle) will extend the existing tools for implode/explode and add the ability to create parts for voices. He will be mentored by Joachim ‘Jojo’ Schmitz (Jojo-Schmitz).

                    Felix's fork of MuseScore on GitHub: https://github.com/Rockettwo/MuseScore
                    Felix's blog for GSoC 2016: https://musescore.org/en/user/124871/blog/

                    Resources:
                    * GSoC 2016 official website
                    * GSoC Student Guide
                    * MuseScore developer handbook
                    * IRC (#musescore on freenode.net)
                    * developer mailing list

                    Ideas 2016

                    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.
                    Copy paste an idea below and change the text with your new idea for GSoC 2016

                    Crash reporting

                    MuseScore currently doesn't have any crash reporting facility. It would make the job of developers a lot easier if we could gather crash logs in a web interface. The first target would be Windows but the crash reporting system should be cross platform. MuseScore's development infrastructure would need to be updated accordingly.

                    We could use the Google Breakpad project as a basis. Breakpad is only part of a crash reporting system, and it doesn't offer a reporting mechanism or a client UI. For a server, see Mozilla's Socorro (Python) or Atom's mini breakpad server (Nodejs).

                    Other interesting resources
                    * Qt and breakpad dev notes
                    * libcrashreporter-qt as used by Tomahawk player.
                    *

                    • Difficulty: Medium to high
                    • Skills: C++/Qt, Web technology and basic server administration skills
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Text utilities

                    1. Search and replace - Ability to search and replace piece of text in staff text, lyrics etc...
                    2. Lyrics hyphenation - Lyrics are displayed below each note per syllable. It's currently a manual job to hyphenate them. Some online tools exist for english. It would be good to include this capability in MuseScore, also for more language
                    3. Spell checker. See https://quickgit.kde.org/?p=sonnet.git
                    • Difficulty: Could be more complex that it looks at first sight
                    • Skills: C++/Qt
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Timeline

                    When a score is growing, it's sometimes hard to know where you are located in the score, which part you worked on already etc... The idea would be to create a new panel, potentially to replace the navigator, which gives an abstract view of the score, showing squares for each measure on each instrument, with a different color if the measure is empty or not. Potentially, having one row for rehearsal mark, for tempo markings, time signatures, key signatures etc...
                    Timeline

                    • Difficulty:Medium to Hard
                    • Skills: Qt
                    • Possible mentor: ...

                    Virtual singer

                    Several users have requested a virtual singer in MuseScore. This feature would make MuseScore sing the lyrics in a score. It's useful for singers in choirs who like to rehearse with actual synthesized lyrics. There are several specialized (open source) software projects and libraries which do "sing synthesis".

                    • See this message on the developer mailing list with several interesting links; Tobias Platten made some progress with QTau, see his blog
                    • Harmony Assistant has a virtual singer plugin
                    • Vocaloid. The software is very popular in Japan, where one of the voices of the software and the virtual character on the software box, Hatsune Miku, has even made large concerts.
                    • A free competitor is Utau. The license of UTAU is unclear to me.
                    • On the same topic, see Cadencii, Aquestone VSTi, Cantor2, Realitone Blue
                    • WORLD seems to be a good open source start
                    • Festival, the open source text to speech engine has a singing mode. See also this
                    • Flite and Flinger based on Festival
                    • An attempt using a now closed web API named Canoris and MuseScore
                    • Sinsy, an open source MusicXML to singing voice converter, working only for Japanese.

                    An external tool that could process a MIDI, or MusicXML file created by MuseScore and make an audio file would be good for singers to practise along.

                    • Difficulty: Hard
                    • Skills: C++/Qt
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Explorer/Finder plugins to display scores information

                    MuseScore 2.0 now saves a thumbnail of the first page in the MSCZ file. A plugin for the different OS file explorer (Windows, Mac OS X, others) could display this thumbnail, and maybe other metadata. See https://musescore.org/en/node/57886#comment-419951 for discussion.

                    • Difficulty: Medium
                    • Skills: C++ ?
                    • Possible mentor: Nicolas Froment (@lasconic)

                    OMR

                    Many users use MuseScore to transcribe scores from paper. This project would be about aiding this use case by providing a side-by-side view of the digital score and a scanned score. A very limited implementation of this project (see screencast) has already been coded (see github) but much more work is needed to make it ready for general usage.

                    • Difficulty: Hard
                    • Skills: Qt
                    • Possible mentor: Werner Schweer

                    Keyboard layout and shortcut management

                    Many shortcuts in MuseScore do have conflicts due to different international keyboard layouts. Example of such a conflict can be found with the French keyboard. To solve this problem, MuseScore needs a system which can detect the client keyboard layout and auto select the appropriate shortcut list. The developer challenge is to make this work for all international keyboard and if needed create for each of them a custom shortcut list. Additional challenges are the differences between Mac OS X and Windows/Linux. See #47361: [Mac OS X] Insert measure keyboard shortcut doesn't exist More related issue: * http://musescore.org/en/node/48846

                    • Difficulty: Medium
                    • Skills: Qt
                    • Possible mentor: ...

                    Chord symbols playback

                    It's currently possible to add chord symbols on top of a staff in MuseScore. These symbols are ignored on playback. It's a frequent feature request to be able to realize these chord symbols as notes in a staff or to optionally "play" the symbols while listening the score. A simple implementation would just play the chord for the whole duration of the measure or until the next chord symbols.

                    • Difficulty: Easy - Medium
                    • Skills: Qt
                    • Possible mentor: Marc Sabatella

                    Extract separate parts from voices on one staff

                    In an orchestral arrangement, it's common to save to save space in the score by combining multiple parts onto one staff. When it comes time to extract the parts, we would like to be able to extract separate parts for first and second horn as a courtesy to the players, as the separate lines get a little tangled on a single staff. See https://musescore.org/en/node/89736.

                    Finale uses a complex system in the part extraction process to support this. We could take that route, or might achieve it just as well by improving layout when voices are made invisible (https://musescore.org/en/node/89736#comment-396896).

                    • Difficulty:
                    • Skills:
                    • Possible mentor:

                    Accessibility

                    Thanks in large part to work done as part of GSoC 2014, we have made significant progress in making the MuseScore interface usable by blind musicians as well as those with limited mobility. There is still much work to be done, however. Currently, a user can browse a score and hear the screenreader recite the names of the various score elements (notes, rest, barlines, etc), but actually editing the score still requires one to be able to see the score and use a mouse in order to click elements and operate the palettes. Having a freely available notation program that is fully keyboard accessible could be life changing for blind musicians. There is also the possibility of creating Braille music output, probably through integration with existing tools that can convert from MusicXML to Braille music.

                    • Difficulty: Medium
                    • Skills: C++/Qt
                    • Possible mentor: Marc Sabatella

                    Searchable palette

                    This is kind of linked to Accessibility. The MuseScore palette has grown in the past versions. It would be very useful to be able to filter elements in the palettes or to search and hightlight them. If the search/filter capability is well designed, it could make it easier to add some elements to the score with the keyboard.
                    A possible design:
                    * Add a filter text field in the palette
                    * Add a shortcut to focus on this text field when a note is selected
                    * Enter "Fermata", the palette is filtered and only a couple of fermatas are displayed
                    * Use tab (or another shortcut) to go through the fermata
                    * Use Return (or another shortcut to enter the fermata)
                    * Use Esc (or another shortcut) to unfilter the palette and give the focus back to the score.

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

                    Annotations

                    Educators and others often like the add markings to a score such as comments or grades. They may also wish to highlight or circle specific passages of music. We could add one or more new element types to MuseScore to create text or shapes that can be attached to individual notes or to score ranges, and a user interface to create these elements. We would also want a way to easily show or hide annotations, possibly by integrating with an existing experimental Layers facility.

                    See https://musescore.org/en/node/88986 for further discussion.

                    • Difficulty: Medium
                    • Skills: C++/Qt
                    • Possible mentor: Marc Sabatella

                    Half/double durations

                    MuseScore currently doesn't provide any way to change the duration of many notes at once. It would be great to have a way to double or half all the durations in a selection. Depending on the student's skills, we could also implement the ability to change all half notes to quarter notes in a selection and provide more options. This might seem like a simple task but in MuseScore, measures have to be full, and MuseScore supports nested tuplets...

                    See https://musescore.org/en/node/72801 for further discussion.

                    • Difficulty: Medium
                    • Skills: C++/Qt
                    • Possible mentor: Nicolas Froment (@lasconic)

                    GSoC 2016 Student guide

                    What to do if you have been accepted as a student for Google Summer of Code 2016?

                    Create and write a blog

                    • Set up a blog where you will communicate your results. It is okay to use an existing one.
                    • Start posting immediately, begin with a description of your project.
                    • Announce your blog, your git account, and a description of your project on musescore.org and on the developer mailing list.
                    • You should write a status report every week. The first weekly report is due on Sunday, 29 May 2016 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval.

                    Suggested sections for the status report are:

                    • Key accomplishments last week
                    • Key tasks that stalled
                    • Tasks in the upcoming week

                    Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

                    Use IRC, the mailing list, and the forums

                    • Subscribe to mscore-developer mailing list if you have not already done so.
                    • Introduce yourself. Include the link to your blog and Git repository there
                    • Describe your project in short
                    • Get an IRC client and connect as often as possible to the #musescore channel on freenode.net. If you need help getting on IRC, ask on the mailing list.

                    All your technical questions should go through this mailing list or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

                    Ask questions in public

                    We're an open community so unless you have a good reason, all communication should be public. Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor. If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

                    Publish a Git repository

                    • Publish your changes immediately in your Git repository.
                    • You have to use github.com for sharing code. See [[Git Workflow]]
                    • Write about location of your Git repository on mscore-developer mailing list and your blog.
                    • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see and if possible, merge your code continuously!
                    • Every commit should contain single change and the code should be working on every commit. Try to prevent huge breakages.
                    • When you feel you've reached point where part of your code should be merged to main repository, just open pull request on Github or tell your mentor.

                    Benefit from the Community Bonding Period

                    • Familiarize yourself with MuseScore's code base
                    • Contact your mentor and establish a plan for the upcoming weeks

                    Be active

                    • Be active, don't expect to be kicked and taken by the hand on every step.
                    • Write weekly reports on time.
                    • Submit your code early.
                    • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

                    Don't forget documentation and tests

                    All new functionality you create should be documented and tested. The documentation and tests should be done as you code, do not keep it on last moment.

                    After the Summer

                    Hopefully, your involvement with MuseScore will continue after GSoC!

                    Links

                    • The DOs and DON’Ts of Google Summer of Code: Student Edition - Some tips for students who want to take part in GSoC
                    • MuseScore Coding Rules - Guidelines about coding for MuseScore
                    • Git Workflow

                    License

                    This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

                    Ideas 2015

                    Update March 2nd: Unfortunately MuseScore was not accepted for the 2015 edition of GSoC. We'll try again next year!

                    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

                    Copy paste an idea below and change the text with your new idea for GSoC 2015

                    Virtual singer

                    Several users have requested a virtual singer in MuseScore. This feature would make MuseScore sing the lyrics in a score. It's useful for singers in choirs who like to rehearse with actual synthesized lyrics.

                    There are several specialized (open source) software projects and libraries which do "sing synthesis".

                    • See this message on the developer mailing list with several interesting links
                    • Harmony Assistant has a virtual singer plugin
                    • Vocaloid. The software is very popular in Japan, where one of the voices of the software and the virtual character on the software box, Hatsune Miku, has even made large concerts.
                    • A free competitor is Utau. The license of UTAU is unclear to me.
                    • On the same topic, see Cadencii, Aquestone VSTi, Cantor2, Realitone Blue
                    • WORLD seems to be a good open source start
                    • Festival, the open source text to speech engine has a singing mode. See also this
                    • Flite and Flinger based on Festival
                    • An attempt using a now closed web API named Canoris and MuseScore
                    • Sinsy, an open source MusicXML to singing voice converter, working only for Japanese.

                    An external tool that could process a MIDI, or MusicXML file created by MuseScore and make an audio file would be good for singers to practise along.

                    • Difficulty: Hard
                    • Skills: C++/Qt
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Explorer/Finder plugins to display scores information

                    MuseScore 2.0 now saves a thumbnail of the first page in the MSCZ file. A plugin for the different OS file explorer (Windows, Mac OS X, others) could use this thumbnail and maybe other metadata to make the display of scores better looking.

                    • Difficulty: Medium
                    • Skills: C++ ?
                    • Possible mentor: Nicolas Froment (@lasconic)

                    Context-sensitive help

                    Learning how to use MuseScore can be pretty challenging. A way to lower the barrier is by adding a context-sensitive help system which works in two ways. One way is to directly obtain explanatory information about any widget you come across in the UI. The other way is to perform a keyword search which directly jumps you straight where you need to be in the UI. Mac OS offers a Spotlight For Help search field,, but not only does this need to work for all platforms and it also needs to work for the menu, toolbars, popup and docked windows and the palette.

                    • Difficulty: Medium
                    • Skills: Qt
                    • Possible mentor: Werner Schweer

                    OMR

                    Many users use MuseScore to transcribe scores from paper. This project would be about aiding this use case by providing a side-by-side view of the digital score and a scanned score. A very limited implementation of this project (see screencast) has already been coded (see github) but much more work is needed to make it ready for general usage.

                    • Difficulty: Hard
                    • Skills: Qt
                    • Possible mentor: Werner Schweer

                    Timeline

                    When a score is growing, it's sometimes hard to know where you are located in the score, which part you worked on already etc... The idea would be to create a new panel, potentially to replace the navigator, which gives an abstract view of the score, showing squares for each measure on each instrument, with a different color if the measure is empty or not. Potentially, having one row for rehearsal mark, for tempo markings, time signatures, key signatures etc...

                    Screenshot 2015-02-23 09.00.04.png

                    • Difficulty:Medium to Hard
                    • Skills: Qt
                    • Possible mentor: ...

                    Keyboard layout and shortcut management

                    Many shortcuts in MuseScore do have conflicts due to different international keyboard layouts. Example of such a conflict can be found with the French keyboard. To solve this problem, MuseScore needs a system which can detect the client keyboard layout and auto select the appropriate shortcut list. The developer challenge is to make this work for all international keyboard and if needed create for each of them a custom shortcut list. Additional challenges are the differences between Mac OS X and Windows/Linux. See #47361: [Mac OS X] Insert measure keyboard shortcut doesn't exist
                    More related issue:
                    * http://musescore.org/en/node/48846

                    • Difficulty: Medium
                    • Skills: Qt
                    • Possible mentor: ...

                    Chord symbols playback

                    It's currently possible to add chord symbols on top of a staff in MuseScore. These symbols are ignored on playback. It's a frequent feature request to be able to realize these chord symbols as notes in a staff or to optionally "play" the symbols while listening the score. A simple implementation would just play the chord for the whole duration of the measure or until the next chord symbols.

                    • Difficulty: Easy - Medium
                    • Skills: Qt
                    • Possible mentor: Marc Sabatella

                    Google Summer of Code 2014

                    MuseScore has been selected for Google Summer of Code 2014 and has been allocated five students to work on

                    • Accessibility with focus on visually impaired musicians
                    • More flexible selection facility
                    • Enhancing and Testing the Import of Guitar Pro Files
                    • Implementation of full JACK support
                    • Swing Playback

                    Read all about the results of GSoC 2014.

                    Ideas 2014

                    Your proposal

                    We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come on IRC channel #musescore on freenode.net, or contact us on the developer mailing list.

                    Also check ideas from previous years: http://musescore.org/en/developers-handbook/google-summer-code

                    Accessibility for Visually Impaired Musicians

                    Blind musicians wishing to create scores in standard notation currently have very few options, since most notation software is not designed with accessibility in mind. It can also be difficult for blind or visually impaired musicians to obtain scores in Braille or other "accessible" formats (large print editions, electronic formats that read scores aloud, etc). MuseScore could be a revolutionary tool in the community of blind musicians if it were enhanced to address these concerns.

                    Some of the areas that need work:

                    • Making all menus, dialogs, and windows keyboard and screen-reader friendly
                    • Adding full keyboard control for score navigation, including the ability to traverse all score elements rather than just notes and rests
                    • Enhance status line display or add new window, with screenreader support, to provide meaningful feedback during navigation
                    • Making all score editing operations performable via keyboard
                    • Improving automatic layout facilities to reduce need for a sighted user to identify places where manual adjustments are needed
                    • Extending MusicXML export as necessary to better support automated MusicXML-Braille converters
                    • Plugins or other automation for export to Braille or other accessible formats (via MusicXML using existing tools)

                    Some of these are relatively easy, others much more difficult. The whole job is very big, but implementing even portions of this could change the lives of many blind musicians.

                    For more on this topic, see the Accessible Music Notation Project site, and the MuseScore Accessibility document in particular.

                    Difficulty: Easy to Hard
                    Skills: C++/Qt
                    Possible mentor: Marc Sabatella

                    Better support of Guitar Pro import

                    Guitar Pro is a very popular software to create tablature. There are a lot of Guitar Pro files on the web. MuseScore 2.0 will be able to create tablature and has minimal support for Guitar Pro 3, 4 and 5 files. There is no support for Guitar Pro 6 format.
                    Importing these file formats will make available hundreds of thousands arrangements to MuseScore users. They would be able to play and edit them. No other free and open source tool support the 4 formats.

                    Some of the areas that need work:

                    • Review and improve Guitar Pro 3, 4, 5 import. See importgtp.cpp and this doc
                    • Implement Guitar Pro 6 import. See TuxGuitar draft implementation
                    • Write tests to make the import process future-proof
                    • Add missing features in MuseScore

                    Difficulty: Easy to Medium
                    Skills: C++/Qt
                    Possible mentor: Nicolas Froment (@lasconic) / Maurizio A. Gavioli (@Miwarre)

                    Virtual singer

                    Several users requested a virtual singer in MuseScore. This feature would make MuseScore sing the lyrics in a score. It's useful for singers in choir who likes to rehearse with actual synthesized lyrics.

                    There are several specialized (open source) software projects and libraries which do "sing synthesis".

                    • See this message on the developer mailing list with several interesting links
                    • Harmony Assistant has a virtual singer plugin
                    • Vocaloid. The software is very popular in Japan, the virtual character on the software box, Hatsune Miko, one of the voice of the software even made large concerts.
                    • A free competitor is Utau. The license of UTAU is unclear to me.
                    • WORLD seems to be a good open source start
                    • Festival, the open source text to speech engine has a singing mode. See also this
                    • Flite and Flinger based on Festival
                    • An attempt using a now closed web API named Canoris and MuseScore
                      https://soundcloud.com/lasconic/una-vaca-lechera-musescore-canoris

                    An external tool that could process a MIDI or MusicXML file created by MuseScore and make an audio file would be good for singers to practise along.

                    Difficulty: Hard
                    Skills: C++/Qt
                    Possible mentor: Nicolas Froment (@lasconic)

                    Proofing tools for lyrics: spellcheck and hyphenation

                    Hyphenation is really simple in Spanish (and might be a good starting point), but it is really hyphenation checking in English that is the most valuable (since very few English speakers know how to hyphenate in English).

                    Hyphenation for lyrics (in English) isn't straight forward. There are plenty of hyphenation algorithms used in desktop publishing and LaTeX but they don't work for lyrics since they disallow one-letter syllables (which is the right choice for end-of-line hyphens but not correct for lyric hyphens, which divide every syllable regardless of letter length). A solution could be to to look up the hyphenation of every word in an English dictionary.

                    Spell checking lyrics also takes some work beyond simply hooking up a spellchecker. For example "ed-i-tor-in-chief" should pass spellcheck as "editor-in-chief". You have to preserve some hyphens and drop others before the spellchecker recognizes the word.

                    Ideally these proofing tools would mark up the score directly (with zig-zag underlines, etc.)

                    Difficulty: Medium
                    Skills: C++/Qt
                    Possible mentor: David Bolton

                    More flexible selection facility

                    MuseScore currently allows you to select regions and then copy, cut, paste, or delete the contents of that selection. However, the user has no control over which elements within the region are affected. So you cannot choose to copy only the notes but not the lyrics, or only the dynamics, hairpins, and breath markings but not the notes, etc. Other programs provide dialog boxes that allow you to control which element types are affected by operations on that selection. MuseScore could be extended to do this as well.

                    Difficulty: Easy
                    Skills: C++/Qt
                    Possible mentor: Marc Sabatella

                    Alternate notation styles for specified ranges

                    MuseScore currently provides a plugin to convert an existing passage into slash notation, but this approach is limited in a number of ways. MuseScore also allows you to specific the transposition for a staff, or to make a staff invisible, or specify the number of staff lines, but these properties are global for the staff throughout the score.

                    What is desired is to be able to select a region and then specify an alternate notation style for that region - slash notation, a different transposition, different number of staff lines, etc. This involves both defining a UI and mechanism for specifying what you want, as well as actually implementing native support for slash notation and perhaps other notation styles.

                    Difficulty: Easy to Medium
                    Skills: C++/Qt
                    Possible mentor: Marc Sabatella

                    GSoC 2014 Student Guide

                    What to do if you have been accepted as a student for Google Summer of Code 2014?

                    Create and write a blog

                    • Set up a blog where you will communicate your results. It is okay to use an existing one.
                    • Start posting immediately, begin with a description of your project.
                    • Announce your blog, your git account, and a description of your project on musescore.org and on the developer mailing list.
                    • You should write a status report every week. The first weekly report is due on Sunday, 18 May 2014 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval.

                    Suggested sections for the status report are:

                    • Key accomplishments last week
                    • Key tasks that stalled
                    • Tasks in the upcoming week

                    Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

                    Use IRC, the mailing list, and the forums

                    • Subscribe to mscore-developer mailing list if you have not already done so.
                    • Introduce yourself. Include the link to your blog and Git repository there
                    • Describe your project in short
                    • Get an IRC client and connect as often as possible to the #musescore channel on freenode.net. If you need help getting on IRC, ask on the mailing list.

                    All your technical questions should go through this mailing list or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

                    Ask questions in public

                    We're an open community so unless you have a good reason, all communication should be public.
                    Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor.
                    If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

                    Publish a Git repository

                    • Publish your changes immediately in your Git repository.
                    • You have to use github.com for sharing code. See Git Workflow
                    • Write about location of your Git repository on mscore-developer mailing list and your blog.
                    • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see and if possible, merge your code continuously!
                    • Every commit should contain single change and the code should be working on every commit. Try to prevent huge breakages.
                    • When you feel you've reached point where part of your code should be merged to main repository, just open pull request on Github or tell your mentor.

                    Benefit from the Community Bonding Period

                    • Familiarize yourself with MuseScore's code base
                    • Contact your mentor and establish a plan for the upcoming weeks

                    Be active

                    • Be active, don't expect to be kicked and taken by the hand on every step.
                    • Write weekly reports on time.
                    • Submit your code early.
                    • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

                    Don't forget documentation and tests

                    All new functionality you create should be documented and tested.
                    The documentation and tests should be done as you code, do not keep it on last moment.

                    After the Summer

                    Hopefully, your involvement with MuseScore will continue after GSoC!

                    Links

                    • The DOs and DON’Ts of Google Summer of Code: Student Edition - Some tips for students who want to take part in GSoC
                    • MuseScore Coding Rules - Guidelines about coding for MuseScore
                    • Git Workflow

                    License

                    This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

                    Accessibility with focus on visually impaired musicians

                    When we talk about music score editors, one of the most notable aspects is the fact that very few of them are designed with accessibility in mind, or scarcely do they provide support for it. If they indeed meet this need, most of them are quite expensive. This leaves blind or visually impaired musicians who wish to create scores in standard notation with very few options.
                    This project aims to add the necessary support for assistive technologies that visually impaired musicians use in order to create a mental picture of the interface. Also, I will make all the menus, buttons and paletts accessible by keyboard, from which will benefit not only blind musicians, but also the average or "power" users who want to use MuseScore efficiently.

                    Andrei Tuicu
                    Full Proposal: https://www.dropbox.com/s/c4ndm842u201j9w/AndreiTuicu_Proposal_MuseScor…
                    My Blog: http://andreituicu.wordpress.com/
                    GitHub: https://github.com/andreituicu/MuseScore

                    Enhancing and testing the import of Guitar Pro files

                    John Pirie

                    http://jpirie23.wordpress.com/
                    https://github.com/jpirie/MuseScore

                    Implementation of full JACK support

                    JACK Audio Connection Kit is a professional sound server daemon that provides real-time, low latency connections for both audio and MIDI data between applications that implement its API.

                    This is a great feature that gives an ability to connect with lots of synthesizers and Digital Audio Workstations. It is possible now to route MIDI and Audio signals, to do a real-time sound effects processing and a lot of other cool things.

                    Here is a list of features I've implemented while participating the GSoC 2014:

                    1. JACK MIDI Out support (PR)
                      This feature gives an ability to send MIDI events to one or several external synthesizers or VST plugins.
                      Profits:
                      • More realistic sound of score.
                      • Adding realtime midi effects to the sound.
                    2. JACK Transport (reposition) (PR)
                      We provide current position in frames (samples) to JACK Transport, keep an eye on it and seek if position changed.
                      Profits:
                      • Seeking to some position in MuseScore causes seeking in all applications (audio/video players, DAWs, etc).
                      • Seeking in any application connected to JACK causes MuseScore to seek.
                    3. JACK Timebase Master (commit)
                      Being the Timebase Master application could provide bar (measure), beat and tempo information to JACK.
                      Profits:
                      • Sync other applications working with midi to MuseScore, managing tempo.
                      • More control over JACK Transport (not just seek, but slow down/accelerate).
                    4. JACK Timebase Slave (commit)
                      As a Timebase Slave we can read information about bar, beat and tempo and sync to any application connected to JACK as a Timebase Master.
                      Profits:
                      • More control over syncing to another application.
                      • Adjusting tempo in real time to application / external automation tracks.
                    5. Changing JACK preferences without restart (commit)
                      This feature gives an ability to enable/disable JACK parameters like "Use JACK MIDI Out", "use JACK Audio" or "Become a Timebase Master" without restarting an application.
                      Profits:
                      • No need to restart MuseScore if you want change preferences related to JACK.
                    6. Restoring JACK connections (commit)
                      Now we can save audio and midi connections to other applications on exit or changing preferences and restore it when you run MuseScore again.
                      Profits:
                      • You don't need to connect all things again manually.
                    7. Automatic control over JACK/ALSA MIDI Out ports (PR)
                      This feature allows MuseScore to determine how many JACK MIDI and ALSA MIDI ports it should have and automatically add/remove ports when needed.
                      Profits:
                      • No need to manually control port number.
                      • One more step to implementing ALSA MIDI.
                    8. Assigning channels to instruments (not merged) (PR)
                      With this feature users can assign any midi port and channel to instruments.
                      Profits:
                      • Channel information wouldn't be lost if you add new instrument, reorder staves or change midi program.
                      • Better control over midi subsystem (you can even assign different ports for each instrument).
                      • Ability to "compress" number of channels by assigning the same channel for a several, for example, piano staves.
                      • Enhanced abilities to import and export scores (implemented import channels from *.ove, *.gtp*, import/export to *.mcsx, *.mscz, *.midi, *.mxl).
                    9. Improved Instument Change element (not merged) (PR)
                      Several Instrument Change elements with one midi program are "joined" together and shown as a single item in mixer.
                      Profits:
                      • No excess items in mixer (particularly important for big and complex scores).

                    Also, there were a lot of bug fixes, related and not related to JACK, improvements of UI, code optimisations and other things.

                    Maxim Grishin (igevorse)

                    My blog: http://igevorse.lited.net/
                    Github page: https://github.com/Igevorse/MuseScore

                    More flexible selection facility

                    http://bartlomiejlewandowski.github.io/gsoc2014/index.html

                    Swing Playback

                    MuseScore 1.3 has minimal support for Swing Playback. However, MuseScore 2.0 has no such feature. The user can only hear his score in straight. Improvements we would like to implement are:
                    Ability to set the swing ratio, adding swing texts specifying the swing for different parts of the score, and saving the score in swing.
                    This way, we would like to enable full fledged Swing Playback support for MuseScore 2.0 as part of this project. This will be a great delight for all those jazz musicians using MuseScore looking for an option to listen to their score in swing.

                    My blog: https://shredpub.wordpress.com
                    Github page: https://github.com/shredpub/MuseScore

                    Cheers.
                    Ruchit Agrawal (shredpub)

                    Google Summer of Code 2013

                    MuseScore was selected for Google Summer of Code 2013 and was allocated two students to work on:

                    • MIDI import improvements
                    • MuseScore and Emscripten

                    Read all about the results of GSoC 2013.

                    Ideas 2013

                    Your proposal

                    We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come on IRC channel #musescore, or contact us on the developer mailing list. To officially apply your summer project idea, follow this link.

                    Also check ideas from previous years: http://musescore.org/en/developers-handbook/google-summer-code

                    MuseScore NaCl

                    Port a part of MuseScore to Native Client (NaCl). There are already some experiment with Qt and NaCl. It would mean the ability to display, play, transpose sheet music in the browser without any plugin.

                    Difficulty: Hard
                    Skills: C++/Qt/QML/NaCl/Chromium
                    Possible mentor: lasconic
                    Student: Apply here

                    MuseScore EmScripten

                    Port a part of MuseScore to Javascript using a language translation tool such as Emscripten. The goal could be to display and transpose a MSCZ file in the browser. Emscripten-Qt is a good start.

                    Difficulty: Hard
                    Skills: C++/Qt/Emscripten/LLVM/Javascript
                    Possible mentor: lasconic
                    Student: Apply here

                    MuseScore resources repository

                    MuseScore is highly customizable. Users can change soundfonts, add plugins, define workspaces, templates, palettes, languages etc... What if there would be an easy way to share all these resources in the cloud and a one click way to install/uninstall them in MuseScore.
                    Some resources to check OCS, Attica client library, KDE Bodega...

                    Difficulty: Medium
                    Skills: PHP/C++/Qt
                    Possible mentor: lasconic
                    Student: Apply here

                    Jianpu notation support in MuseScore

                    Jianpu notation/Numbered musical notation is widely used in China. A large amount of Chinese music is recorded in Jianpu and most Chinese people are more familiar with Jianpu than standard staff scores. But there are relatively limited software for editing Jianpu and they have obvious disadvantages. In sum, there's a need for high quality Jianpu notation software. For more information: Here.

                    Difficulty: Hard
                    Skills: C++/Qt
                    Student: Eli Yang
                    Possible mentor: lasconic, Rui Fan (aka Vanferry)

                    Improve MIDI import

                    MuseScore currently imports MIDI files quite badly. There are many areas in which MIDI import could be improved and most of them require smart algorithms. This project would target several key problems.

                    • Tuplet import: Currently, MuseScore considers only binary note values.
                    • Dot vs Tie: Currently, MuseScore always uses ties and never dots.
                    • Drums import
                    • Tempo changes
                    • Swing import: if a MIDI file is played with swing, MuseScore should be able to recognize it and notate it as straight notes, but still play swing.
                    • Voice separation: MuseScore puts everything under voice 1 currently.
                    • Treble/Bass clefs discrimination for piano: MuseScore currently uses a fixed point to separate the treble and bass clef. A smarter algorithm could be found.

                    shot_130418_125502.png
                    Difficulty: Medium
                    Skills: C++/Qt, AI
                    Possible mentor: werner

                    upload
                    Attachment Size
                    shot_130418_125502.png 19.34 KB

                    MIDI import improvement project

                    === The project goal is to improve MIDI import functionality ===

                    • Handbook for developers
                    • Proposal
                    • Project page on Melange
                    • Mailing list
                    • Commit history

                    --------------------------------------------------------------------------------------
                    Current work

                    More "smooth" clef changes (for single notes, ...)

                    --------------------------------------------------------------------------------------
                    Plans

                    • Availability of the original MIDI durations.
                    • Quantization of slightly unaligned MIDI files.
                    • - Use Simon Dixon's algorithm (C++) for automatic beat recognition.
                      - Ask user to adjust, if necessary, the start and the end points of the first bar on piano roll or specify the time scale difference between MIDI events and the ideal grid.

                    --------------------------------------------------------------------------------------
                    Implemented features

                    Lyrics import from karaoke (.kar) files

                    • Lyrics without slashes (\ /) - screenshot
                    • Title and composer/performer import - screenshot
                    • MIDI file

                    Selectable lyric import option
                    Combo boxes in Lyrics column of MIDI import panel gives an opportunity to select the track to assign lyric to.
                    Example of karaoke file with one lyric track:

                    • Screenshot

                    Another, manually created example shows multiple lyrics support (2 lyric tracks):

                    • Screenshot
                    • MIDI file

                    Drums import

                    Here is a MIDI import of drums:

                    • Screenshot
                    • MIDI file

                    Also there is an option of a drum staff splitting (thanks to chenlung for his idea):

                    • Screenshot

                    Split without staff bracket:

                    • Screenshot

                    Swing notation (without playback)

                    Here are some examples of swing detection results.

                    Triplet swing (2:1)

                    • Before - screenshot
                    • After - screenshot
                    • MIDI file
                    • Score file

                    Shuffle (3:1)

                    • Before - screenshot
                    • After - screenshot
                    • MIDI file
                    • Score file

                    Larger piece

                    • Before - screenshot
                    • After - screenshot
                    • MIDI file

                    Automatic clef selection within a staff depending on average chord pitch

                    Clef changes option is checked in the MIDI import panel by default.

                    Tuplet recognition for MIDI import

                    Below are some examples of automatic MIDI import.
                    Manual adjustments/highlights are made in a couple of cases to show that program correctly handles multiple voices.

                    MIDI file:
                    Triplets - piano roll

                    Result of the import:
                    Triplets - result of the import

                    Triplet

                    • Screenshot
                    • MIDI file
                    • Score file

                    Triplet when time sig = 3/4

                    • Screenshot
                    • MIDI file
                    • Score file

                    Triplet when time sig = 5/4 (reply to Tuplet rhythms in MIDI import)

                    • Screenshot
                    • MIDI file

                    Duplet (time sig = 6/8)

                    • Screenshot
                    • MIDI file
                    • Score file

                    Qaudruplet (time sig = 6/8)

                    • Screenshot
                    • MIDI file
                    • Score file

                    Triplet and other shorter notes

                    • Screenshot
                    • MIDI file

                    Mixed triplets, including triplet with rest

                    • Screenshot
                    • MIDI file
                    • Score file

                    Septuplet

                    • Screenshot
                    • MIDI file
                    • Score file

                    Nonuplet (time sig = 3/4), requires 1/64 quantization

                    • Screenshot
                    • MIDI file
                    • Score file

                    Nonuplet (time sig = 4/4), requires 1/64 quantization

                    • Screenshot
                    • MIDI file
                    • Score file

                    2 voices - triplet and regular notes

                    • Screenshot
                    • MIDI file
                    • Score file

                    2 quintuplets (rest is inside one of them) and manually space-adjusted case

                    • Screenshot 1
                    • Screenshot 2
                    • MIDI file
                    • Score file

                    2 voices - triplet and quintuplet.
                    Need to manually set quantization value to 1/32

                    • Screenshot
                    • MIDI file
                    • Score file

                    3 voices - triplet, quintuplet and septuplet simultaneously
                    and manually space-adjusted case + highlighted case

                    • Screenshot 1
                    • Screenshot 2
                    • Screenshot 3
                    • MIDI file
                    • Score file

                    Larger piece example (reply to Can't open a MIDI file with triplets)

                    • Screenshot
                    • MIDI file

                    "The Oxman Returneth" by Marc Sabatella - various triplets + pickup measure

                    • Screenshot
                    • MIDI file
                    • Score file

                    -- Recognition of first and last tuplet tied notes --

                    First tied note:

                    • Screenshot
                    • MIDI file
                    • Score file

                    Last tied note:

                    • Screenshot
                    • MIDI file
                    • Score file

                    Tied tuplets:

                    • Screenshot
                    • MIDI file
                    • Score file

                    Track reordering in MIDI import panel

                    For example, left piano track goes above right track that is incorrect, so we can move right track to the top.

                    • Before reordering - screenshot
                    • After reordering - screenshot
                    • MIDI file

                    Pickup measure support

                    • Screenshot
                    • MIDI file
                    • Score file

                    Duration subdivision based on metrical analysis

                    Notes, rests + dots and ties are created according to strong/weak bar divisions.

                    => Here are some examples of automatic MIDI import:

                    Half note at the center of 4/4 bar

                    • Screenshot
                    • MIDI file
                    • Score file

                    Half rest at the center of 4/4 bar

                    • Screenshot
                    • MIDI file
                    • Score file

                    Rests and chords near beats

                    • Screenshot
                    • MIDI file
                    • Score file

                    Half rest at the start or at the end of 3/4 bar - divided into quarter rests

                    • Screenshot
                    • MIDI file
                    • Score file

                    Example of larger piece of music

                    • Screenshot
                    • MIDI file

                    Last quarter rest in compound meters like 6/8 - splitted into 2 8th

                    • Screenshot
                    • MIDI file
                    • Score file

                    12/8 compound bar

                    • Screenshot
                    • MIDI file
                    • Score file

                    Rests of mixed duration

                    • Screenshot
                    • MIDI file
                    • Score file

                    Left/right hand separation of piano track

                    In addition to fixed-pitch split there is an option to take into account the average hand width of the pianist.

                    Example

                    • before split: Screenshot
                    • after split: Screenshot
                    • MIDI file

                    UI panel to specify MIDI import operations

                    Apply operations on MIDI tracks and get the immediate result (see screenshots above).

                    MIDI import - for developers

                    Almost all MIDI import files begin with the “importmidi” prefix and are located in mscore/ directory.

                    Internally, MIDI import in MuseScore consists of two main stages:

                    • track information extraction from the MIDI file to fill the track list in the MIDI import panel
                    • import of “music” MIDI events with the default values of applied operations

                    All of the import is controlled by values of the MIDI import operations (default or user-defined). Those operations are stored in the MidiImportOperations class and may be different for each track. This class also contains MidiData class which is responsible for the storage of contents of the MIDI file (necessary because the user can switch between multiple open MIDI files). The object of MidiImportOperations class is stored in MuseScore Preferences class, which can be found in mscore/preferences.h.

                    The opening of a MIDI file is followed by a range of internal program actions, the main ones are:

                    • musescore.cpp calls the MIDI import panel’s function setMidiFile that is located in importmidi_panel.cpp
                    • the MIDI import panel invokes the meta track info extraction function (extractMidiTracksMeta) in importmidi.cpp
                    • the importMidi function in importmidi.cpp is called, which performs all necessary calculations and adds the music information from the MIDI file to the new score

                    If the user changes the operations and clicks the Apply button, the doMidiImport function (from importmidi_panel.cpp) obtains the values of operations from the GUI model and saves it in the preferences.midiImportOperations object. After, the usual importMidi function is called. Immediately after the import function performs its job, the preferences.midiImportOperations object is cleared.

                    The MIDI “music” import stage reads the MIDI file information previously stored in preferences.midiImportOperations.midiData object and calls convertMidi function from the importmidi.cpp file. After, all operations and algorithmic manipulations are applied to the MIDI file content:

                    • list of track objects is created; tracks without note events are omitted
                    • each note is stored in object of MidiChord class
                    • all notes with very close “on time” events are combined into chords, also in class
                    • notes too short are cleaned up
                    • overlapping notes of equal pitch are corrected to rid of their intersection (removeOverlappingNotes function, importmidi.cpp)
                    • a tuplet search is performed (importmidi_tuplet.cpp); multiple voices are also taken into account
                    • after that - quantization of all chords (importmidi_quant.cpp); tuplets and non-tuplet notes are quantized by different grids
                    • removeOverlappingNotes is called once again
                    • if the user decides - the track is subdivided into left/right hand parts (a purpose mainly for piano tracks) - importmidi_lrhand.cpp
                    • chords with notes of different length are separated into different chords with equal notes (splitUnequalChords function in importmidi.cpp)
                    • import of drums (importmidi_drum.cpp)
                    • instruments are created
                    • measures (bars) are created, so now it’s possible to find a bar by tick
                    • chord durations are converted into music notation; metrical analysis is performed here to find preferable duration subdivision in bar according to strong/weak bar fractions (see importmidi_meter.cpp)
                      after that track meta is set
                    • tuplets are added to the score, according to recognized tuplet events that are stored in MTrack::tuplets multimap
                    • key signatures are created
                    • if the user chooses - the program tries to detect swing: to replace triplet [4th + 8th] by 2 straight 8ths (for usual swing, 2:1) or dotted 8th + 16th by 2 straight 8ths as well (for shuffle, 3:1); the search of patterns and note replacement is performed on score chord/rest segments; code for swing detection is in importmidi_swing.cpp
                    • clefs are created, they are of two types: at the beginning of staff (mandatory clefs) and, if the user wishes, clefs may change (added) within a staff depending on average chord pitch to make the score more “smooth”. Tied notes are not supposed to be separated by the clef insertion - algorithm tries to check it (code is in importmidi_clef.cpp)
                    • time signatures are created
                    • lyrics are imported, if any - importmidi_lyrics.cpp (lyric can be a title, composer or text next to notes - like song words)

                    The score is then rendered by the MuseScore graphics engine.

                    ***

                    Currently to add a new operation one should add some pieces of code to several places (maybe it will be possible to bring all this pieces into one place in the future):

                    • register the new type of operation in impotmidi_operation.h - MidiOperation::Type
                      add operation variable into the TrackOperations struct in importmidi_operations.h and set the default value in C++11 manner
                    • insert a new node in importmidi_opmodel.cpp that will be shown in the MIDI import panel; connect to the controller if necessary; controller hides/shows the nodes according to some defined rules (for example, “Allow clef change…” is a hidden node for drum tracks)
                    • add operation to the setNodeOperations function in importmidi_opmodel.cpp
                    • add operation to the setTrackOperation function in importmidi_trmodel.cpp
                    • add operation to the trackOperations function in the same file

                    The operation then becomes available for the MIDI import algorithms.

                    ***

                    MIDI import tests are located in mtest/importmidi/tst_importmidi.cpp

                    To test functions that have only definition in cpp file, the auxiliary file mtest/importmidi/inner_func_decl.h header is used where the headers of such tested functions should be put.

                    MuseScore and Emscripten

                    libmscore ported to the browser using Emscripten

                    Google-Melange public project page: project page
                    Original Proposal: proposal
                    Git Repos:

                    • libmscore port: Repo
                    • EmbindGenerator script: Repo
                    • Sha of last MuseScore commit, before branching: f9f8462d96

                    Documentation (how to set up libmscore with emscripten): here
                    Progress Log (archive): log

                    Google Summer of Code wrap-up/summary

                    You can find documentation on how to set-up your environment to begin using libmscore in Javascript here .

                    All of the work of getting emscripten to compile the libmscore code itself is completed and documented, even if all of that code isn't fully usable yet. This means that others should be able to reproduce the process of compiling libmscore to Javascript. If anyone attempts this process, I welcome all feedback so that I might improve it.

                    It is important to note that porting future versions of libmscore to emscripten (that is, versions of libmscore which now use qt5), will require additional work of first porting qt5 to Javascript. As of the time of writing, I'm not aware of any initiatives looking to complete this task. Qt5 was only fully "released" just over a year ago, and MuseScore itself did not make the complete switch over until just the past summer, so I think with time this task will be realized. From there, the process of porting over libmscore would follow a process very similar to the one I outlined for versions of libmscore using Qt4.8.

                    While I did not complete all of the goals outlined in my original proposal, libmscore is at a point where it is possible to load a simple score into the browser and verify some of the metadata. From here, it's a matter of debugging the remaining issues and exposing more libmscore functionality to Javascript. My hope is that outside of GSoC I can continue working on this project so that I can accomplish the goals outlined in the original proposal. I feel I am very close to those goals. I hope that someone more experienced with Qt5 will take up the task of porting Qt5 to emscripten, or perhaps maybe I could take up the task myself down the road. With Qt5 ported to emscripten, I still see many benefits of getting newer versions of libmscore to work in the browser. I would like to see that become a reality.

                    Progress Log

                    This was removed from the main page. It basically contains a log of the progress I made on the project over the summer.

                    Progress Log

                    Current Work (last updated 23 September 2013)

                    • Continue debugging errors related to fonts.

                    Next Steps

                    • Verify that the score has loaded correctly
                    • Get a score to paint on the screen
                    • Clean up the libmscore changes

                    Previous Work

                    • (7 September 2013) Verified and loaded a score, but loading more complicated scores with text (as well as rendering) has presented issues with font loading, therefore I've been looking into that problem. It seems that QPF format fonts might be easier to load, but getting the makeqpf utility which creates those files proved complicated, as QPF doesn't seem very current with Qt. Talking to the creator of emscriptenqt, it seems the true;type font loading issue might be a problem within emscriptenqt itself, so I've been exploring the source trying to track it down. In the meantime I've created my own branch of emscriptenqt to track changes.
                    • (23 August 2013) Continuing work on loading the score. Initialization seems to be working, but I had to comment out some methods to get that to work, which appear to be causing problems with the loading of a score. I now either must stub out all methods related to some of the graphical initialization which was skipped, or re-visit some of the initialization code. For the time being, stubbing out the methods seems to be the better option until I can get a score fully loaded and verified.
                    • (15 August 2013) Currently working on loading a score and verifying the score loaded correctly (by printing out some meta info). Right now, I have exposed some methods to javascript which allow me to load the score, and I'm sorting out some bugs related to the transition from a traditional desktop app to a javascript one (embedded files, initialization, etc.).
                    • I'm also working on creating a better testing process. I had looked into using PhantomJS , but it appears they're using an older version of webkit which doesn't have some of the javascript features required by emscripten. For now I'll just be using javascript files and the javascript console.
                    • (updated 30 July 2013) Working on getting just one class (Score) to have some methods exposed so that I can load a score into the browser and then hopefully render it. So far I'm able to instantiate an instance of score in the browser, but I'm getting some weird thing about unbound types. Been getting help on the emscripten irc to sort through these errors. Hopefully this won't be too much of a set-back.
                      • Relevant paste: paste
                      • update: I've abandoned using embind for now, and I'm just using C wrappers and "EXPORTED_FUNCTIONS." This seems to be a lot simpler to expose more methods, although it's a little less flexible and not as streamlined.
                    • UPDATE (24 July 2013): I've created a repository for the embindgenerator script here: repo
                    • UPDATE (23 July 2013): Using the doxygen XML file I'm able to extract code structure from a collection of source files. I then feed that file into a node script I'm developing which parses the file (using xmldom, a node module) and traverses the document, generating a cpp embind file as it goes along. This script is not yet complete, but I'm making steady progress. The script is already able to identify structures which need to embind declarations generated for them.
                      • Sample generated file: //pastebin.com/m24Gpbeu
                      • Here is another sample, this one is the "Page" class from libmscore, still have a few things to tweak: Page_EMBIND
                    • UPDATE (19 July 2013) : Continuing experiments with embind lead mixed results. Succesfully got some example projects working with the "EXPORTED_FUNCTIONS" method, and when calling embind on a single file, but when trying to use embind on a project consisting of more than one file I'm having lots of problems. I successfully generate the bitcode, but it seems that these methods aren't getting exposed in javascript. I'm going to do some more experimenting and debugging as well as trying to find more documentation on embind and asking for help in the irc. I've also been looking into automated generation of the embind bindings. It seems someone created a tool for visual studio which does it (can be found here ), but using visual studio is far from ideal. Talking to the creator, it seems that he got doxygen to generate an xml file containing the layout of the code, and then using that generated code structure created the embindings. I think creating a Node.js tool which generates these embindings would be something worthwhile. Once I get the bindings created manually working, I'm going to look into that.
                      • UPDATE (20 July 2013): After quite some time of checking and re-checking my work, turns out I was using "--embind" as the compiler flag, instead of "--bind" which is the correct flag. Embind seems to be working as expected now and I plan to move on to creating a tool which will automatically generate embind files.
                    • UPDATE (9 July 2013) : First taste of success -- generated bitcode out of the libmscore source using emscripten. Unfortunately, getting libmscore's c++ classes and functions exposed to Javascript may prove a bit tricky. It seems there are several routes to take. I'm going to do some research and possibly a little experimentation with these methods before committing to one.
                      • Emscripten, interacting with code: link
                      • Embind, a tool which exposes c++ classes: link

                      Hopefully I can find a way to automate as much of this process as possible to make future patches simpler.

                    • UPDATE (6 July 2013): Figured out how to get emscripten-qt to compile with support for SVG and QDeclarative stuff. After some experimentation, solidified that LLVM 3.4 will not work with emscripten, at least not without more patching to emscripten itself, which is likely outside the scope of this project. That left me with either rewrite parts of libmscore to use different data structures or modify some header files that used the atomic calls. Since everything in emscripten doesn't use multiple-threads, I can just modify some of the headers to do their literal sequential operations rather than use the (unsupported) atomic calls. This seems like the most likely solution right now. After I complete this, if everything seems to be working, I'm going to go back and clean up some of the libmscore changes I made which I don't think are necessary anymore.
                    • Modify the header to stub out the atomic methods doing their simple sequential counterparts instead.
                    • Create a qmake build for libmscore that uses emscripten-qt's qmake.
                      • UPDATE (28 June 2013): Have been fighting with basically getting a square peg to fit in a round hole. Encountered a bug in llvm 3.2 in which some library functions for c++11 weren't yet implemented. These bugs were fixed in 3.4, but emscripten only supports llvm 3.2. A branch of emscripten supports llvm 3.3, which I've been trying to make work for llvm 3.4. Emscripten-qt's demos failed, but I decided to go ahead and try to build libmscore with this configuration anyway, but I've been encountering lots of inter-dependencies between libmscore and the rest of MuseScore. I've mostly been solving these by stubbing out methods and commenting out lines, tracking any changes I make in a log. If this configuration of emscripten and llvm doesn't work, I have talked with lasconic about several alternatives I might pursue.
                      • Pursue alternative configurations, listed below.
                        • Try to isolate the bugfix in 3.4, and fork llvm
                        • Rewrite the parts of libmscore which are victim to the bug in llvm 3.2. It seems like it might be Map or atomic operations causing the problems.
                      • UPDATE (21 June 2013): I've created a qmake.pro file, as well as some other files which are normally intermediately generated during a build (all.h and config.h), which seem to be working well. Now I'm just plowing through the innevitable rampant compiler-errors. I'm keeping track of all the changes I make from a "vanilla" libmscore build so that I can walk through all my steps as well as reproduce it. My goal is to get everything to compile with emscripten, and then once it's working go back and optimize.
                      • For reference I will look at https://github.com/wschweer/mscoreserver which also uses qmake to build libmscore.
                    • UPDATE (18 June 2013): emscripten-qt configured and working. Wrote up a short summary of the steps to get emscripten-qt running attached as a child page.
                    • UPDATE (17 June 2013): Continued attempts with emscripten-qt show light on a possible bug in emscripten, looking into work-arounds. Also began work on what will need changed in libmscore's build process (CMakeLists.txt and such) to use the qmake from emscripten-qt as well as emcc and emscripten's build tools. Should more or less still be on schedule with the original proposal timeline as long as I can solve these problems by the end of the week.
                    • UPDATE (6 June 2013): having some difficulties getting emscripten-qt examples to run. I've been exchanging correspondence with Simon St James (creator of emscripten-qt) to sort through them, who has been extremely helpful. Making progress.
                    • Setting up my work environment, git, etc..
                    • Looking through libmscore code and reading relevant documentation (especially coding rules).
                    • Reading Emscripten documentation
                    • Learning the details of the libmscore build process

                    Setting up LLVM/clang, emscripten, and emscripten-qt

                    Introduction

                    From llvm.org, "the LLVM Project is a collection of modular and reusable compiler and toolchain technologies." It is used for the optimization of programs written in arbitrary programming languages. Clang is a C/C++ front-end for LLVM. Emscripten uses these technologies to convert C++ code into Javascript. Emscripten-qt adds support for Qt in Emscripten.

                    This guide will go through the process of setting up these tools, designed for a Linux environment, although many of the links have instructions for other operating systems as well.

                    Versions

                    Versions of software used:

                    • Linux:
                      • linuxmint-13-xfce-64
                    • llvm:
                      • LLVM (http://llvm.org/):
                        LLVM version 3.2svn
                        Optimized build with assertions.
                        Built Apr 15 2013 (11:06:21).
                        Default target: x86_64-unknown-linux-gnu
                        Host CPU: corei7
                    • CLANG:
                      • clang version 3.2 (tags/RELEASE_32/final)
                        Target: x86_64-unknown-linux-gnu
                        Thread model: posix
                    • emcc (emscripten):
                      • emcc (Emscripten GCC-like replacement) 1.4.9 (commit 0ad87244178badf26cd5c8e0ed88116e87026472)
                    • node:
                      • v0.10.0
                    • qmake (emscripten-qt) :
                      • QMake version 2.01a
                        Using Qt version 4.8.4

                    LLVM and Clang

                    To get LLVM set-up, simply follow the steps provided on LLVM: Getting Started. Be sure that you meet all of the requirements listed on the requirements section, and then follow the steps outlined on getting started a summary.

                    After llvm/clang are finished compiling, add the directory where the binaries are to your path. Should be something like "/home/user/somewhereInHome/llvm/Release+Asserts/bin" then try these examples to make sure everything is working:
                    (the parts in [] are notes, don't type them)

                    clang --help
                    clang file.c -fsyntax-only             [check for correctness]
                    clang file.c -S -emit-llvm -o -        [print out unoptimized llvm code]
                    clang file.c -S -emit-llvm -o - -O3
                    clang file.c -S -O3 -o -               [output native machine code]

                    if everything ran successfully, then clang and LLVM are configured correctly and you can move on to the next step.

                    Emscripten and Emscripten-qt

                    For emscripten and emscripten-qt, just follow the instructions on the emscripten-qt wiki the section "how do I use it." The instructions are fairly detailed, and I will summarize them here:

                    Create a directory (probably somewhere in your home directory) for emscripten and emscripten-qt. For the sake of this guide, that directory will be referred to as "/home/user/emscriptenqt/", make sure to replace all instances of that directory with what your's actually is.
                    Enter the following commands, replacing /home/user/emscriptenqt

                    mkdir build-emscripten-qt
                    cd build-emscripten-qt
                    export EMSCRIPTEN_ROOT_PATH=/home/user/emscriptenqt/emscripten/
                    ../emscripten-qt/configure -xplatform qws/emscripten-clang  -embedded emscripten -static -opensource -debug  -no-qt3support -no-opengl -no-openssl   -system-zlib -no-gif -qt-zlib -qt-libpng -no-libmng -no-libtiff -qt-libjpeg -no-accessibility -dbus -script -no-fpu -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-icu -no-rpath  -confirm-license -no-webkit -no-phonon -no-freetype -nomake demos -nomake examples -little-endian -no-feature-socket  -no-feature-codecs -no-feature-textcodecplugin -no-feature-systemlocale  -no-feature-qws_multiprocess -no-feature-sound    -no-feature-printpreviewwidget  -no-feature-printpreviewdialog  -no-feature-systemsemaphore -no-feature-sharedmemory -no-feature-localeventloop -feature-qws_clientblit -feature-qws_cursor  -depths 32 -make tools  --prefix=$(pwd)/install
                    make sub-tools-bootstrap && make install_qmake sub-moc-install_subtargets sub-uic-install_subtargets sub-rcc-install_subtargets && make  sub-corelib-install_subtargets sub-gui-install_subtargets install_mkspecs

                    Now you should have emscripten and emscripten-qt. You may wish to add /home/user/emscriptenqt/emscripten to your PATH, but it is not necessary. Next, we will run an example Qt app to make sure that everything is working correctly.

                    cd ..
                    mkdir qtdemos
                    cd qtdemos
                    export PATH=/home/user/emscriptenqt/build-emscripten-qt/install/bin/:$PATH
                    export QMAKESPEC=/home/user/emscriptenqt/build-emscripten-qt/install/mkspecs/qws/emscripten-clang
                    cp -R ../emscripten-qt/demos/chip .
                    cd chip
                    patch main.cpp < ../../emscripten-qt/emscripten-stuff/chip-emscripten-qt-patch.patch 
                    cd ..
                    mkdir build
                    cd build
                    qmake ../chip/chip.pro
                    make
                    mkdir -p qt-fonts && cp ../../build-emscripten-qt/install/lib/fonts/helvetica_*.qpf ../../build-emscripten-qt/install/lib/fonts/fixed_*.qpf qt-fonts/
                    cp ../../build-emscripten-qt/install/lib/QtGui.a QtGui.so
                    cp ../../build-emscripten-qt/install/lib/QtCore.a QtCore.so
                    ../../emscripten/emcc \
                      chip.bc \
                      QtGui.so QtCore.so \
                      -O2 \
                      --closure 0 \
                      --jcache \
                      --pre-js ../../emscripten-qt/emscripten-stuff/pre-qt.js \
                      --js-library ../../emscripten-qt/emscripten-stuff/pre-qt-library.js \
                      --embed-file qt-fonts \
                      -s EXPORTED_FUNCTIONS="['_main', '_EMSCRIPTENQT_resetTimerCallback', '_EMSCRIPTENQT_timerCallback', '_EMSCRIPTENQT_timerCallback_springboard', '_EMSCRIPTEN_canvas_width_pixels', '_EMSCRIPTEN_canvas_height_pixels', '_EMSCRIPTENQT_mouseCanvasPosChanged', '_EMSCRIPTENQT_mouseCanvasButtonChanged']" \
                      -s TOTAL_MEMORY=67108864 \
                      -s INLINING_LIMIT=50 \
                      -o chip.html 

                    The emscripten-qt wiki goes into more detail about what all of the parameters and commands mean.

                    If all completes as it should, you should now have a chip.html file in that directory. Open it with a supported browser, and the chip's demo page will load. If so, then emscripten-qt is working as it should, and you're finished!

                    NOTE: you might notice that the generated canvas isn't large enough to display all of the chip's demo. Apparently emscripten-qt does not yet support dynamically resizing of the canvas, and the canvas must be set manually to the correct size. On about line 23 of the generated html file, you should find:

                    <canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>

                    change it to something like:

                    <canvas width="800px" height="600px" class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>

                    Using emscripten to port libmscore to Javascript

                    Setting up Libmscore emscripten development[a]

                    Getting Started

                    First, follow all of the steps outlined here for how to set up LLVM/clang, emscripten, and emscriptenqt

                    Next, you can either clone a version of libmscore already set up for emscripten here or you can try to clone a pre-qt5 version of libmscore and follow the notes in appendix A of the necessary changes to use emscripten/qt.

                    As of the time of writing, emscriptenqt will not work with the latest version of LLVM/clang, however, using the compatible version will generate build errors because of unsupported atomic calls. Since everything done in emscripten is basically synchronous, this is not really an issue, and these atomic methods can be stubbed out. I have already created a file called “atomic_fixed ” Move and rename this file (remove the “_fixed” suffix) to “emscripten/system/include/libcxx/atomic” where “emscripten” is the folder which contains your emscripten directory.

                    Once you have the libmscore code and emscripten and emscriptenqt set up, open up the “build.sh” file (or obtain one here ), and edit the “EMSCRIPTEN_FOLDER” to point to your folder which contains the emscripten and emscripten-qt folders.

                    When the build.sh file is set up correctly, you can simply run “./build.sh” and that will generate a “libmscore.js” file which contains libmscore code converted to javascript. Make sure that you have the valid EXPORTs from the emscripten setup process:

                    export PATH=/path/to/emscriptenqt/build-emscripten-qt/install/bin/:$PATH
                    export QMAKESPEC=/path/to/emscriptenqt/build-emscripten-qt/install/mkspecs/qws/emscripten-clang
                    export PATH=/path/to/emscriptenqt/emscripten/:$PATH

                    You will need these exports everytime before you build. Replace “path/to/emscriptenqt” with the path to your emscriptenqt folder.I recommend creating a simple shell script containing those lines, which you can simply run before the build.

                    Exposing Libmscore’s C++ methods to Javascript

                    Once libmscore.js has been generated successfully, there are still more steps to expose libmscore methods to Javascript. Any desired methods must be exported during the compile step (part of build.sh), and they must be added to Module in Javascript. Also, it’s usually useful to wrap C++ methods in an extern “C” {} section and stick to C-style calls, as these are easier to export.

                    For my purposes, I found it easiest to put all my wrapped functions into “embinds/classScore.cpp” : classScore.cpp . There you can see how I wrap C++ class methods and such, and the basic naming convention that I followed. This was mostly to prevent conflicts with existing libmscore code and for ease of use of exporting to javascript.

                    Next, add this method to the “-s EXPORTED_FUNCTIONS” array in the build.sh file: this line . Note, you do have to add a “_” before the function name when listing it in this array, even though that method doesn’t have a “_” in the source.

                    Finally, you call “Module.cwrap” from Javascript, before calling your method. This is explained in better detail here . Following my examples in test.html should be fairly straightforward: test.html. I put all my cwraps into one large “Libmscore” object.

                    It’s important to note that “Module.cwrap”, the emscripten functionality that allows calling these methods, only understands basic types: number, boolean, and String (for char*). Any pointers to objects are just treated as a number as an index to the emscripten’s heap object. So it’s perfectly fine to pass that number in and out of wrapped methods, but you can’t expect to do anything with that pointer in regular javascript, because to JS it will just be a number. With Strings, emscripten works some magic that copies a passed in string to its internal memory structure, and then passes that created pointer to the C++ method.

                    After you have successfully exported the method and cwrap’d it, you can call from normal javascript, like in test.html.

                    Appendix A: Modifying libmscore for emscripten

                    Foreward: this is a collection of my notes detailing the steps I took to convert a normal clone of MuseScore into the codebase I used for compiling with emscripten/qt. I don’t imagine these exact steps will work with any other version of MuseScore except for the specific one I used, but the process should be similar. It is therefore my hope that these notes may be useful for any interested party to replicate the process for a different version of MuseScore.

                    First I cloned MuseScore from this sha . I then copied the entirety of the “libmscore” folder out of that directory and into a different one. I then created a new repository in that directory. This allowed me to keep most of what I was doing separate from the rest of MuseScore, while pulling in only the pieces I needed.

                    I created a libmscore.pro qmake project file more or less following a template similar to mscoreserver's project file . I removed things which were not necessary for the emscripten port. The current .pro file I’m using (at the time of writing) looks like this . Of particular interest will be the cxxflags, sources and includes, the “QT += svg declarative”, and the precompiled header. I added “-std=gnu++11” and “-stdlib=libc++” lines, and removed “-fno-rtti.”

                    I also copied over the “all.h” precompiled header from the MuseScore repo into the new repo. This file could probably be generated during the build process, but for my purposes I did not pursue this route. There were some files I needed to remove from “all.h”, these included:
                    QWebView, QWebFrame, QtXml, QAbstractMessageHandler, QXmlSchema, QXmlSchemaValidator, QXmlStreamReader, QNetworkAccessManager, QNetworkReply, QNetworkCookieJar, QHostAddress, QUdpSocket, QHttpPart, QHttpMultiPart, QDeclarativeEngine, QDeclarativeComponent, QDeclarativeItem, and QDeclarativeView. “all.h” should end up looking something like this .

                    I copied over “config.h.in” from the MuseScore repo into the new repo, and renamed it “config.h” I had to mess around with some of the defines, such as USE_ALSA and other audio flags, resulting in this .

                    I had to add some missing includes to all.h ( and ).

                    Lots of methods which had to deal with midi events and synthesizer stuff had to be stubbed and commented out. Mostly inside of “instrument.h”, “undo.h”, “undo.cpp”, “instrtemplate.h”, “instrtemplate.cpp”, “instrument_p.h”, “instrument.cpp”, “keyfinder.cpp”, “layout.cpp”, “pitchspelling.cpp”, and “rendermidi.cpp”

                    Edited the synthesizer source files to remove and reference to “effects/effect.h” stuff, then removed that include from those files.

                    I had to rename “QZipReader”, “QZipWriter”, and “CentralFileHeader” because of conflicts with emscriptenqt classes. I simply added an “M” onto the end of all these classes.

                    I commented out the chord list loading stuff in “style.cpp”

                    I commented out a lot of the fonts in mscore.cpp so that I could test loading one font at a time to see which were giving issues.

                    After these steps I was able to get a very basic score file to load (this score ) and was able to verify some of the meta tags associated with it.

                    Ideas 2012

                    Your proposal

                    We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come on IRC channel #musescore, or contact us on the developer mailing list

                    Instrument Editor

                    • read instrument description files (done)
                    • build a GUI to display and edit all instruments
                    • show list of instruments
                    • display all attributes of currently-selected instrument
                    • make all attributes editable
                    • create new instrument, use currently-selected instrument as a starting point
                    • remove instrument
                    • change currently-selected instrument
                    • save instrument descriptions
                    • save as

                    Difficulty: Easy to Medium
                    Skills: C++ / Qt. No detailed knowledge of MuseScore internals is required, except for the InstrumentTemplate class usage. The code is mostly independent of MuseScore core development.
                    Estimated LOC required is 4000.
                    Possible mentor: lasconic

                    Beam mode editor

                    A UI to edit the rules of beam groups and a way to assign the rules to measure, staff etc... similar to time signature (measure based, different by staff)

                    Difficulty: Moderate
                    Skills: C++ / Qt. A bit of knowledge of MuseScore internals.
                    Possible mentor: lasconic

                    Symbol Editor

                    Create an editor for MuseScore specific graphical symbols which are in SVG format.
                    A specialized (simplified) variant of this project is to create an editor for note heads.

                    Difficulty: Moderate to Hard
                    Skills: C++ / Qt. Requires some knowledge of MuseScore internals.

                    Integrate Breakpad

                    What is BreakPad
                    "Breakpad is a library and tool suite that allows you to distribute an application to users with compiler-provided debugging information removed, record crashes in compact "minidump" files, send them back to your server, and produce C and C++ stack traces from these minidumps. Breakpad can also write minidumps on request for programs that have not crashed. Breakpad is currently used by Google Chrome, Firefox, Google Picasa, Camino, Google Earth, and other projects."

                    Difficulty: Moderate to Hard
                    Skills: C++ / Qt
                    Possible mentor: lasconic

                    Ideas 2011

                    Your proposal

                    We strongly believe that the best proposal for you is the one you'll do. If you have any suggestion pass by the IRC channel #musescore or contact us on the developer mailing list

                    Implement a plugin manager in MuseScore

                    See plugin manager

                    • Define a plugin package and write documentation for plugin developers
                    • Create interface in MuseScore to list, install, uninstall plugins
                    • Need to deal with security
                    • Bonus: Update and compatibity management

                    Difficulty: Moderate to Hard
                    Skills: C++ / Qt
                    Possible mentor: lasconic

                    Offer self installable language packs on musescore.org

                    MuseScore software is translated in more than 20 languages thanks to the drupal based site at http://translate.musescore.org The languague files are provided as qm file on this website, but fur a lot of users it would be more convenient to download an auto installable language file.
                    Difficulty: Moderate
                    Skills: Depending on your proposition C++ / CMake / NSIS
                    Possible mentor: lasconic

                    Setup automated testing

                    MuseScore being an interactive software, it needs UI testing to improve his stability. MuseScore community has setup a wiki page to gather information about this topic. Your role will be to choose the right tool, write testing scenarii etc...
                    Difficulty: Moderate to hard
                    Skills: Depending on your proposal
                    Possible mentor: david

                    Improve MIDI file import

                    Improvements in this area could include:

                    • Triplet handling
                    • Voice and staff separation

                    Difficulty: Hard
                    Skills: AI, C++, Music
                    Possible mentor: werner
                    Additional information: Current state of MIDI import by Kevin Hylee.

                    Enhance the Audio Widget Library for better user experience

                    The Audio Widget Library contains the controls for Volume, Mixer etc... Users will benefit a more usable and good looking set of controls.
                    Difficulty: Easy
                    Skills: C++, Qt, ergonomy
                    Possible mentor: lasconic

                    Ideas 2010

                    Your proposal

                    We strongly believe that the best proposal for you is the one you'll do. If you have any suggestion pass by the IRC channel #musescore or contact us on the developer mailing list

                    Add fretboard & tabstaff support in MuseScore

                    Difficulty: Hard
                    Skills: C++ / Qt graphics, guitar theory
                    Possible mentor: Werner
                    Status: Fretboards partially implemented in development builds for MuseScore. See http://musescore.org/en/node/5262#comment-17026 Implemented

                    Extend the Qt Script based plugin framework

                    The plugin framework is still very young but there are already some plugins. Plugin developers have a lot of ideas to bring more features to MuseScore.
                    Difficulty: Moderate
                    Skills: C++ / Qt
                    Possible mentor: lasconic
                    Status: Implemented

                    Implement a plugin manager in MuseScore

                    See plugin manager

                    • Define a plugin package and write documentation for plugin developers
                    • Create interface in MuseScore to list, install, uninstall plugins
                    • Need to deal with security
                    • Bonus: Update and compatibity management

                    Difficulty: Moderate to Hard
                    Skills: C++ / Qt
                    Possible mentor: lasconic
                    Status: Implemented

                    Offer self installable language packs on musescore.org

                    MuseScore software is translated in more than 20 languages thanks to the drupal based site at http://translate.musescore.org The languague files are provided as qm file on this website but a lot of users it would be more convenient to download an auto installable language file.
                    Difficulty: Moderate
                    Skills: Depending on your proposition C++ / CMake / NSIS
                    Possible mentor: lasconic

                    Automated upgrade of MuseScore

                    In MuseScore 0.9.6, a automated check for upgrade has been added. For next version, users would be able to check for update, download the upgrade package, install it and restart MuseScore
                    Difficulty: Moderate to hard
                    Skills: C++
                    Possible mentor: thomas_
                    Status: Implemented

                    Setup automated testing

                    MuseScore being an interactive software, it needs UI testing to improve his stability. MuseScore community has setup a wiki page to gather information about this topic. Your role will be to choose the right tool, write testing scenarii etc...
                    Difficulty: Moderate to hard
                    Skills: Depending on your proposal
                    Possible mentor: david

                    Improve MIDI file import

                    Improvements in this area could include:

                    • Triplet handling
                    • Voice and staff separation

                    Difficulty: Hard
                    Skills: AI, C++, Music
                    Possible mentor: werner

                    Enhance the Audio Widget Library for better user experience

                    The Audio Widget Library contains the controls for Volume, Mixer etc... Users will benefit a more usable and good looking set of controls.
                    Difficulty: Easy
                    Skills: C++, Qt, ergonomy
                    Possible mentor: lasconic

                    Play progressive dynamic and tempo changes

                    Currently MuseScore plays dynamic and tempo changes but can't deal with ritardando or crescendo
                    Difficulty: Easy to Hard depending on the proposal
                    Skills: C++, Qt
                    Possible mentor: lasconic
                    Status: Partly implemented (crescendo but not ritardando)

                    Music Hack Day

                    Music Hack Day is a regular gathering for music and tech enthusiasts. During this event, programmers, designers, thinkers from all over the world meet up and try to create music-related software or hardware hacks during a 24-hour coding marathon. The core team of MuseScore contributors, namely Werner Schweer, Thomas Bonte and Nicolas Froment are regular attendees of the Music Hack Days. They promote MuseScore and MuseScore.com, and empower other coders to create something with one of the following resources:

                    • Being open source, the MuseScore software is highly applicable to hack with
                    • MuseScore plugin framework , which provide a simple API to some MuseScore features
                    • MuseScore.com API , which provide access to the scores available on MuseScore.com

                    Upcoming hackdays

                    All upcoming hackdays listed at http://musichackday.org

                    Previous hackdays

                    Below is the list of Music Hack Days where MuseScore was represented, as well as the resulting hacks.

                    Salzburg April 8-9 2017

                    http://classicalmusichackday.org
                    Attending: Lasconic - Thomas - Werner

                    Boston October 21-23 2016

                    http://classicalmusichackday.org
                    Attending: Lasconic - Thomas - Joachim Ganseman

                    • Microtonality in MuseScore
                    • Autosync score+youtube on MuseScore.com

                    London December 13-14 2014

                    https://www.hackerleague.org/hackathons/music-hack-day-london-2014
                    Attending: Nicolas - Thomas - Chen Lung

                    Barcelona June 12-13 2014

                    http://new.musichackday.org/2014/barcelona/
                    Attending: Nicolas - Thomas

                    • Motion Browser Laser Scoring: Export your score to mp4, html5 and a laser cutter.

                    London 7 - 8 December 2013

                    http://london.musichackday.org/2013
                    Attending: Thomas - Nicolas - ChenLung - Manuel Bärenz

                    • MuseScore Collab: edit a score from several computers at the same time - video

                    Bologna 5 - 6 October 2013

                    http://bologna.musichackday.org/index.php?page=Main+page
                    Attending: Miwarre - Thomas - Nicolas - Werner

                    Munich 27 - 28 July 2013

                    http://hackday.peachnote.com/
                    Attending: Thomas Bonte - Paul Sebastien - Florian Weiss - Nicolas (remote)

                    • Steinway Radio Sessions: Scores from MuseScore.com streamed to a Steinway piano over MIDI

                    Denver 20 - 21 July 2013

                    http://denver.musichackday.org/index.php?page=Main+page
                    Attending: Marc Sabatella

                    • Accessible Music Notation: Open up the world of notated music to blind musicians. (video)

                    Barcelona 13 - 14 June 2013

                    Attending: Thomas - Nicolas - Werner - Paul Sebastien

                    • Sheet music sharing on Facebook: share scores by posting a MuseScore.com link on Facebook - video
                    • MuseScore Browser MIDI player: Practise sheet music directly in a modern browser with a sheet music player with ability to change tempo and mute any staff
                    • iScoreCase: 3d-print a customized iPhone 4 case with your favorite music score - video

                    Vienna 1st - 3rd February 2013

                    Attending: Thomas - Nicolas - Werner
                    Site: http://classicalmusichackday.org

                    • Audiveris as a Service
                    • MuseScore as a Service

                    Cannes 26th - 27th January 2013

                    Attending: Nicolas
                    Site: http://cannes.musichackday.org/2013

                    • Tap Along: Mobile app which let you play a score by tapping the rhythm on the touch screen - Video1 - Video2

                    Barcelona 14th - 15th June 2012

                    Nicolas - Thomas - Kaspar - Quim Llimona & Sara Gozalo

                    • Teach me Nina - Music learning in Google Hangout with MuseScore sheet music
                    • Sing your melody: Write your scores in MuseScore by singing the pitches
                    • Scores4U: Multi platform application to search for music, lyrics and scores. Visor+editor for scores in HTML5

                    Blog post: Hello from Barcelona

                    Cannes 29th - 30th January 2012

                    Thomas - Mathieu Barthet

                    • Audience Score Following: score following for audiences using node.js - Video
                    • SonicMusic: Sonic Visualiser integrating MuseScore.com API

                    London 3rd - 4th December 2011

                    Thomas - Nicolas - Joachim Ganseman - Richard Lewis - Keith Moon - Andrew Robertson

                    • MuseScore MIDI follower: score following based on input of MIDI instrument
                    • OpenEMI app: MuseScore scores together with Bluenote songs nicely bundled in one iPad app
                    • PolyFailic TransCraption: failed attempt for polyphonic transcription
                    • MuseScore.com API experiments: Perl client for MuseScore API and MusicXML feature extraction.

                    Boston 5th - 6th November 2011

                    Thomas - Nicolas - Matthias Röder - Vladimir Viro - Hervé Bitteur

                    • MuseScore PDF Import with Audiveris
                    • ClipSwitch, videoscores switch board
                    • Music21, adding music21 magic sauce to MuseScore

                    Barcelona (Sonar) 16th - 17th June 2011

                    Thomas - Nicolas - Bram de Jong

                    • Score follower with SampleSumo
                    • Lyric search plugin for MuseScore using MusixMatch

                    Berlin 28th - 29th May 2011

                    Thomas - Nicolas - Werner

                    • Annotating scores on MuseScore.com
                    • First steps of MuseScore Connect

                    San Francisco 7th - 8th May 2011

                    Thomas - Nicolas - Lucas Gonze - Pieter-Jan Vaernewijck

                    • Shape notes plugin with Lucas Gonze leads to the MuseScore shape notes plugin .
                    • MuseScore Sessions Online music lessons with video and sheet music using Tokbox Opentok API
                    • Android app collectionista

                    New York 12th - 13th February 2011

                    Thomas - Nicolas - Matt Prokup

                    • Score follower on matlab using chroma analysis with Matt Prokup
                    • Live Score annotator using Node.js, websocket

                    Cannes 23rd - 24th January 2011

                    Thomas - Nicolas (remote)

                    • Sheet music sound cloud recorder , iPad app.

                    Barcelona 2nd - 3rd October 2010

                    Thomas - Nicolas - Joachim Ganseman

                    • Score follower based on pitch recognition in python with Joachim Ganseman
                    • MuseScore Singer using Canoris vocaloid API

                    London 4th - 5th September 2010

                    Thomas - Nicolas - Werner

                    • Android OSC companion app for MuseScore
                    • Auto Score Tubing with MATCH VAMP plugin from QMUL

                    San Francisco 15th - 16th May 2010

                    Thomas - Nicolas - Joachim Ganseman

                    • MusicXML media mapping extension with Michael Good and Dan Grover
                    • RecordFinder for MuseScore

                    Amsterdam 24th - 25th April 2010

                    Thomas - Nicolas

                    • Sound ScoreCloud leads to videoscores on MuseScore.com

                    Amsterdam 21st October 2009

                    Thomas - Nicolas (remote)

                    • Soundcloud plugin for MuseScore, first submited app in the now huge SoundCloud app gallery

                    MuseScore 2.2 hit list

                    Must fix before release

                    • Upload audio to musescore.com: first investigation seems to indicate that it’s between S3 and the client. S3 or someone in between is killing the connection: remote host closed connection, connection reset by peer.
                      Possible solutions:

                      • Use something different than S3
                      • Check idea with content-length
                      • … more help needed
                        References:
                      • #197716: Audio file will not upload
                      • https://github.com/musescore/musescore-com/issues/1690 (error 404, not a public repository?)
                    • New soundfont with better sound. Help us improve the default MuseScore soundfont
                    • #196321: Tenor Drum playback not functioning correctly
                    • MscoreText.ttf kerning on Mac (need to recreate the font on linux): #266144: Mac: Too wide spacing in dynamics with more than one character (ff, mp etc.)
                    • #196771: Regroup Rhythms deletes various elements, even more lost on undo

                    Regressions

                    • #195891: "Score Information" dialog too big for screen with 768 height
                    • #196321: Tenor Drum playback not functioning correctly
                    • #197101: Ctrl+Home does not reposition view to first element
                    • #197131: Regression: Bass synthesizer and bass guitar create popping sounds
                    • #198831: Regression: Cannot enter rests via mouse on drum staves
                    • #202271: Copy-paste sextuplets/octuplets and their removal leads to corruption
                    • #212776: Unwanted string-like sounds when playing
                    • #227826: Regression: In any Text-area, you are prevented from using the (Del) key.
                    • #234811: No sound on Mac and Windows, I/O's PortAudio API drop down menu empty
                    • #269262: Missing default keyboard shortcut for "Save as.."
                    • #269378: Double coda roadmap is wrong
                    • #269439: Content of some palettes disappears when the palettes width get reduced to its minimum
                    • #268991: Regression: Fluid: Envelopes are not behaving correctly
                    • #270136: Regression 2.2: File with MMRest and vertical frame created in 2.1 doesn't display correctly in 2.2
                    • #270408: Broken visual tracking of colliding notes
                    • #270562: Regression: Unison notes in a shortest value are not played
                    • #270714: "Save online" fails with 2.2RC, on Windows

                    Bugs

                    • #4525: Repeats with more than 3 endings
                    • #6091: Multiple volta bracket endings playback incorrectly
                    • #8604: Better control of repeats and jumps for playback
                    • #12971: Same note in different voices and lengths plays only the length of the shortest note (done in 2.2)
                    • #32696: Section break causes pause before repeats and jumps during playback
                    • #48456: Repetition, 1, 2 and 3 doesn't work
                    • #82021: Text hinting causes ugly output
                    • #78416: Tempo text oddities in score with linked parts until save/reopen
                    • #81711: Scores saved in unexpected location if saved after MuseScore crashes and restores session
                    • #87066: FluidSynth plays Incorrect Pitch When Alternate Values Used for “Scale Tune”
                    • #105646: create album of continuous-view scores will fail ASSERT(score()->nstaves() == staves.size()) in Measure::layout2
                    • #112376: Offset Tremolo is not saved correctly.
                    • #117191: [Windows] Font kerning issue with lyrics in 2.0.3 not present in 2.0.2
                    • #117486: wrong scrolling of 2nd and subsequent pages when playing a multi-page score with vertical page layout
                    • #148276: 'Open' volta lines must be extended over the entire 'ending' to play back correctly
                    • #150956: Saving failes when relative pathnames used on command line
                    • #151521: Crash due to bad selection after undo of operation originally performed in linked score
                    • #153691: Active Drum input palette won't close if more than one file open
                    • #163691: Crash after removing and undoing a staff in file with elements linked to themselves
                    • #167171: Make custom palettes based upon advanced workspace default to not enable editing
                    • #189736: On copy/paste measure(s) with slur(s) in score, the slur(s) get(s) lost in part
                    • #195146: Rehearsal mark alignment changes to center after reload if added via palette double click
                    • #196306: Metronome emphasizing wrong beat in some cases when using real-time (automatic) note input
                    • #197466: Trombone Range edits
                    • #197716: Audio file will not upload
                    • #205946: The last entered extra bass in lutes > to 7 courses is shown when launching the playback
                    • #209331: Update Preferences > Shortcut entries for enharmonic shortcuts
                    • #209596: Screencapture + Copy + Transparency issue
                    • #211461: Editing a dynamic’s text disables it
                    • #213221: Crash when adding fermata on barline in part for staff >1 when score has spanning barlines
                    • #219521: Add a SVG file by double-click, then clear it in the palette, leads to crash
                    • #222176: When splitting a measure the note stays selected.
                    • #222031: Crash after undo on a tied deleted/copied-pasted note belonging to a chord
                    • #202271: Copy-paste sextuplets/octuplets and their removal leads to corruption
                    • #222181: Changing the duration of rests doesn't work consistent inside tuplets via toolbar
                    • #223531: Offsets in text frame are lost if combined with text frame margins
                    • #223406: Blank part tab name after part export or copy
                    • #224031: Crash by undoing the removal failure of the repeats palette symbols separating multimeasure rests
                    • #224451: Mismatch between "To Coda" and "Fine" when the first is deleted before enable mmrests
                    • #224781: Create a tuplet on a selected mmrest leads to corruption
                    • #224806: Can't remove spacer attached to the last staff after reordering instruments
                    • #227096: Crash by reseting/editing lyrics with underscore before rests
                    • #228531: Courtesy clefs don't appear on lines ending in repeat barlines
                    • #229686: Crash by entering consecutively in a measure quadruplets and other upper tuplets
                    • #230221: Printing umlauts from FreeSerif or FreeSans doesn't work with certain printers
                    • #230531: Issues with playback of complex voltas
                    • #234811: No sound on Mac and Windows, I/O's PortAudio API drop down menu empty
                    • #247641: Tremolos between notes corrupted on part creation
                    • #248891: Chord symbols transposed incorrectly between concert score & transposed parts
                    • #250381: Wandering hairpin in score with mmrest & invisible staves
                    • #255646: Change time signature when the measures of entire score are joined causes a crash
                    • #255791: [MusicXML import] use lyric number as relative instead of as absolute line number
                    • #267778: To Coda in same measure as D.C. al Coda is ignored
                    • #269044: fluid: default velocity-to-filter cutoff modulator should be disabled
                    • #269212: "Tab bar" in View menu on macOS Sierra
                    • #269361: MuseScore does not print clefs or note heads on osx 10.13.4 (beta)
                    • #269438: PDF export problems with High Sierra 10.13.4 Beta 2
                    • #269516: lyrics dash doesn't propagate correctly to linked staff
                    • #269603: Repeats, Jumps and Volta follow-up
                    • #270332: multiple jumps with playRepeats

                    New features

                    • #5163: Option to select the MIDI Output
                    • #17615: Delete in menu
                    • #111346: "Grace note after" doesn't sound during playback
                    • #175886: Do not require fretboard diagrams to be attached to a note
                    • #198486: Copy and paste multiple Fretboard Diagrams
                    • #208006: Embed MP3 support by default (Done for Windows)
                    • #232931: Make Toggle System Break shortcut available when note or measure selected
                    • #235516: [MusicXML] support .musicxml file extension
                    • #235526: [MusicXML] support MusicXML 3.1
                    • #269952: Allow new templates to be seen without restart

                    Braille features in MuseScore 4

                      This page refers to music Braille features that were currently planned or under development. With the release of MuseScore 4.2, complete documentation about Braille can now be found in the main Handbook: Braille

                      Icon set

                      Visit latest reference

                      The following is outdated

                      Current Icons

                      The in-progress icon set can be found here.
                      https://github.com/musescore/MuseScore/tree/master/mscore/data/icons

                      Specifications

                      Visual Design

                      * All icons must be vector-based.
                      * All toolbar icons must be monochrome with a transparent background.
                      * Toolbar icons should be 24x24 px with 1px margins.
                      * If the symbol is narrow, rotate it 45° left or right to fill the focal space.
                      * All icons must be international and untranslatable. Don't use the "B" symbol for "Bold" or "I" for "Italics", but simply use lowercase "a" with the appropriate formatting applied.
                      * Keep elements aligned to a square pixel grid for sharpness.

                      If in doubt, refer to the Gnome icon design guidelines .

                      Icon Files

                      * Icons should be submitted in the SVG format.
                      * Use a single layer only.

                      Relevant Art

                      • //visualinstrumentlibrary.com/ Enchoris instrument library
                      • Gnome's Symbolic Icon Theme
                      • //www.google.com/design/spec/style/icons.html# Google Design icon guidelines
                      • The Noun Project - Flat Icon Repository
                      • Raphaël's vector icon set

                      MuseScore 3 features not (yet) implemented in MuseScore 4

                        Introduction

                        • This list is a work in progress. Some of these features may be implemented before 4.0 is actually released. Others are already planned for a post MuseScore 4.0 release, although there may be a new design.
                        • Some might even exist but in a different form that those of us accustomed to MuseScore 3 have not discovered yet.
                        • The MuseScore 4.X Github project page tracks features that will be implemented post MuseScore 4.0.
                        • This list is organized by general topic area, and within each topic area, are sorted more or less by priority.

                        Playback

                        Playback of invisible instruments (back in 4.4)

                        • In earlier versions of MuseScore 4, setting an instrument invisible forced it to also be muted, with no way to override.
                        • There was a simple solution, though - set the staff to be invisible instead of the instrument. Which is often preferable anyhow, since many use cases for invisible staves for playback have them paired with a visible staff for notation. So mostly, it will just be a matter of re-education.
                        • The biggest issue will be import of existing scores that rely on this.
                        • There is a closed/fixed issue on this - https://github.com/musescore/MuseScore/issues/10951
                        • There is a closed/rejected PR to convert invisible instruments into invisible staves on import - https://github.com/musescore/MuseScore/pull/18229
                        • In MuseScore 4.4, playback for invisible instruments has been restored.
                        • See https://github.com/musescore/MuseScore/pull/19433 and the closed issue https://github.com/musescore/MuseScore/issues/19235.

                        Using custom instruments.xml

                        • Custom instruments.xml workaround see this post and this post.

                        Synthesizer (not planned)

                        Sound configuration is now done via the Mixer and via Preferences. Certain advanced features have yet to be replicated in MuseScore 4, such as the ability to change the tuning standard used for the entire score away from the default A4 = 440Hz.

                        Selecting sounds within SoundFonts (back in 4.2)

                        It's always been possible to choose individual sounds from VSTs and Muse Sounds in MuseScore 4, but as of MuseScore 4.2 this will be possible with SF2 and SF3 SoundFonts as well, so users of MS Basic and other SoundFonts won't be stuck using the default sound for each instrument.

                        Independent control of subchannels

                        • To simulate articulation techniques in score playback, Musescore create multiple (sub)channels internally for some instruments. For example, the build-in Violin use 3 separate channels: arco, tremolo, and pizzicato. The 'instruments' Men and Women had separate channels for Tenor/Bass and Soprano/Alto respectively.
                        • Manual adjustments on individual channels inside MuseScore is absent, previously Mixer offers such adjustment, esp annoying for rehearsing with Closed Score SATB.
                        • The relative volume of channels (relative loudness of arco notes against pizzicato notes of same instrument) depends on the soundfont (for instrument using soundfont sf2/sf3 file) and the new Musescore score interpretation software (for instrument using VSTi or Musesounds).
                        • It was possible to have e.g. arco in voice 1 and pizz. in voice 2, for 2 violins in one staff, it is no longer.

                        Velocity controls

                        • MuseScore 3 allows editing Velocity properties of dynamics symbols, hairpins, and of individual notes ( varying effect with SND setting), see Dynamics: Loudness of a note
                        • MuseScore 4.2 allows editing Velocity property of individual notes, please see and help improve the Properties panel chapter. Has no effect on instruments using MuseSound. source: https://musescore.org/en/node/359743
                        • Definition is now more in line with MIDI, ie. the onset loudness/timbre control, rather than overall loudness.
                        • MuseScore 4.2 disallows editing of Velocity property of dynamics symbols and hairpins.
                        • It is expected a more sophisticated system will replace this
                        • See (the meanwhile closed/fixed) issue at https://github.com/musescore/MuseScore/issues/10990

                        Range-control for dynamics-symbols (partially back in 4.4)

                        • In MU3 you can specify area of effect of a dynamics-symbol (p, mf, f, ff...), i.e. whether it applies to the entire score, the whole instrument, or the current stave (hand) only, see Dynamics: Dynamic range
                        • As of MuseScore 4.4, this functionality has been partially restored. You can now set the dynamic range to apply to the whole instrument, the current staff, or a specific voice.
                        • The option to apply dynamics to the entire score is still not available.
                        • See https://github.com/musescore/MuseScore/pull/22662 and the closed issue https://github.com/musescore/MuseScore/issues/22175.

                        Tuning controls not working

                        • MuseScore 3 allows setting Tuning of individual notes, and in the synthesizer
                        • MuseScore 4.2 allows setting Tuning of individual notes, please see and help improve the Properties panel chapter.
                        • See plans in comments under velocity and synthesizer
                        • See https://github.com/musescore/MuseScore/issues/18257

                        Guitar bends not working (back in 4.2)

                        • Guitar bends played in MU3 but not in MU4
                        • This is not planned for 4.0 in order to create a new design for mapping the bend shape to the playback
                        • See the closed/fixed issue at https://github.com/musescore/MuseScore/issues/13544

                        Independent muting of staves / voices

                        • The MuseScore 3 mixer had controls to allow you to mute individual voices and individual staves of an instrument
                        • These controls are missing in MU4, with no obvious workaround

                        MIDI and other controls for staves in mixer

                        • In the mixer, setting up the MIDI port and channel, color, and muted voices is no longer possible. The MIDI channel there also controlled assignment of channels in MIDI file export, thus right now, creating MIDI files with specific channel assignments is not possible. See https://github.com/musescore/MuseScore/issues/19262
                        • For some details and an image of the missing controls, see forum post Musescore 4: Where have all the ...MIDI controls... gone?.

                        MIDI mapping and MIDI CC

                        • Musescore 3 sends MIDI CC 2 (default CC 2, also available CC1,CC4,CC11) if the SND instrument and sound is configured correctly, see Synthesizer.
                        • Musescore 3.6.2's Staff and system text custom MIDI CC function is half baked, may deem counterproductive even for advanced Musescore user.
                        • VST: MuseScore 4 Update: Alpha 2 is now released!: "entirely new playback events system" (meaning the MusePlaybackEvents (MPE) ) and "VST instruments and effects support: Please note that we will be building additional tools, like automation and MIDI mapping in later releases, once MS4 is out" and Tantacrul tweeted "The system translates down to MIDI perfectly. We need to now build a system for hooking up CC events and improving keyswitch capability." : It is unclear as of how musescore end users will be able to customize the message: eg by editing Text ? by editing data on a separate time lane?

                        JACK

                        • It does not seem like JACK support is on the radar.
                        • This is a significant regression for anyone trying to do video synchronization (e.g., for movie scoring).
                        • See https://github.com/musescore/MuseScore/discussions/13745 for a possible workaround on Linux
                        • See also #337937: Bring back JACK support for proper Linux Modularity

                        Highlighting of note heads during playback

                        • MU3 highlights the heads of notes which are currently played according their voice.
                        • Issue: https://github.com/musescore/MuseScore/issues/11313

                        Piano Roll Editor

                        • This is expected to be redesigned and reimplemented for MuseScore 4.x.

                        Audio device selection

                        • There are some high-level controls for selecting audio devices, but lower-level controls a la MuseScore 3 are not necessarily planned. It remains to be seen how much of an issue this turns out to be in practice.

                        Capo playback (back in 4.1)

                        Playback for capo markings returned in MuseScore 4.1 along with a new floating widget to adjust capo properties.

                        The capo marking lives in the Guitar palette. It's usage is demonstrated in this video: https://www.youtube.com/watch?v=MWEtevLeAmM&t=61s.

                        Zerberus SFZ Synthesizer

                        • Not planned; people wishing to use SFZ files will hopefully be able to use VST players.

                        Metronome: Count-in (back in 4.6)

                        • See https://github.com/musescore/MuseScore/issues/9183

                        Trill playback styles (default, baroque)

                        • See https://github.com/musescore/MuseScore/issues/25346

                        Piano keyboard tool not showing which notes are playing

                        • See https://github.com/musescore/MuseScore/issues/14428

                        Engraving

                        Fix to line

                        • MuseScore 3 had a facility to force notes of any given pitch to display on a specific staff line. This is used for a wide variety of purposes, including customizing slash notation, notating string harmonics, handling clef changes within cross-staff notation, differentiating multiple voices under ottavas, suppressing visibility of ledger lines, and other more esoteric but not completely off-the-wall use cases.
                        • Currently, there is no plan to bring this functionality back - instead, the hope is to come up with native ways to handle each of the different use cases.
                        • There exists a plugin to do this in MuseScore 4 if needed.
                        • See https://github.com/musescore/MuseScore/issues/11855

                        Hook settings (back in 4.1)

                        • MuseScore 3 had independent controls for start & end hooks, including height
                        • MuseScore 4 provides a much more limited set of controls
                        • See the closed/fixed issue at https://github.com/musescore/MuseScore/issues/13653

                        Other functionality

                        Advanced Selection (back in 4.2)

                        • "Select More" is missing two options: "Same measure" and "Same beat" (added in 3.5) are no longer available in Mu4.
                          Expected back in 4.2.
                          "Search in selection" is missing too.

                        Cursor feedback

                        • In MU3 the mouse cursor changes while dragging the score with left click.
                          This is no longer the case in MU4.

                        Advanced workspace

                        • See [MU4 Issue] Add back "Advanced" workspace, or something like it #11057.

                        Apply current palette element command (back in 4.2)

                        • See the closed/fixed issue at https://github.com/musescore/MuseScore/issues/13281

                        Zoom to page width command (back in 4.0.2)

                        • Implemented in MuseScore 4.0.2
                        • See https://github.com/musescore/MuseScore/pull/13807 and the closed issue https://github.com/musescore/MuseScore/issues/13806

                        Ctrl+click to select overlapping elements (back in 4.4)

                        • MU3 allowed you to select elements underneath other others via Ctrl+click
                        • Implemented in MuseScrore 4.4
                        • See https://github.com/musescore/MuseScore/pull/21438 and the closed issue https://github.com/musescore/MuseScore/issues/10225

                        Plugin Creator

                        • This is expected to be redesigned and reimplemented for a post MuseScore 4.0 release.

                        Plugin API

                        • This is expected to be redesigned and reimplemented for a post MuseScore 4.0 release.
                        • See https://github.com/musescore/MuseScore/issues/8859 and e.g. the closed/fixed issue at https://github.com/musescore/MuseScore/issues/13162 for a missing feature
                        • As of MuseScore 4.4 most plugins no longer work at all, some can get adjusted with just some minor changes, other need a complete rewrite or can't get made working at all anymore

                        Plugin commandline option

                        • the -p commandline option to start a plugin at the start of MuseScore is gone. But --plugin still exists and does the same.

                        Score comparison tool

                        • The UI would need to be updated to work with MuseScore 4 but presumably, the underlying code would still be usable.

                        Split display

                        • In MuseScore 4, each open score is given a separate OS window, so these windows can be dragged side-by-side to recreate the Split Screen feature in MuseScore 3. (In MuseScore 3, all scores are shown as tabs in a single OS window.)
                        • “Split display” feature in the version 3 handbook
                        • See https://github.com/musescore/MuseScore/issues/12248

                        MIDI import panel

                        • Needs to get ported, this should happen in a later 4.x.
                        • See the closed (!) issue at https://github.com/musescore/MuseScore/issues/11918

                        Image capture tool

                        • Previously Image capture button, the clean SVG output functionality is highly valued in the musescore.org community, popular among users for educational purposes.
                        • Not implemented in MuseScore 4 yet. Uses split display, see above.
                        • Workaround plugin Inkscape 1.2 Extension: Musescore Viewbox by musikai
                        • Planned, see https://github.com/musescore/MuseScore/issues/15912

                        Language switch (without requiring a restart)

                        • Switching language settings now requires a restart.
                        • See https://github.com/musescore/MuseScore/issues/12379 and the closed issue at https://github.com/musescore/MuseScore/issues/12382

                        Shortcuts for Key Signatures, Time Signatures, Symbols

                        • Shift+K, Shift+T, and Z are non-functional. You can access controls via View / Master Palette, so, Shift+F9 followed by K, T, or S.

                        Shortcut for elision

                        • Ctrl+Alt+- was added as the shortcut for the elision character in 3.6, relevant especially for lyrics, but this was not fully ported to MuseScore 4.

                        Multiple Shortcuts

                        • MuseScore 3 allows the user to set up several shortcuts for one and the same command.
                          This is no longer possible in MuseScore 4 (except by manually editing the shortcuts.xml, so the functionallity is still there, but the UI for it is missing)

                        Stacking order

                        • MuseScore 4 provides useful controls to send forwards / backwards / to front / to back but lacks direct control over the stacking order of MuseScore 3, which allowed for precise setting of values for custom elements you want to resume in multiple places in a score.
                        • Something that will be missed by advanced users mostly.

                        MuseScore Drum Line (MDL) (back in 4.4)

                        • Windows & macOS : MuseScore 4.4 and above as Muse Drumline (requires Muse Hub).
                        • Linux: not yet available.

                        Unroll repeats

                        • See https://github.com/musescore/MuseScore/issues/9670

                        Split staff

                        • See https://github.com/musescore/MuseScore/issues/13849

                        PortableApps (back since 4.0.1)

                        • Building and providing PortableApps (for Windows) has stopped.
                        • See see the issue at https://github.com/musescore/MuseScore/issues/15876

                        Windows 32-bit version (won't come back)

                        • Building and providing 32-bit versions for Windows has stopped and won't come back.

                        Frames within frames

                        • Adding horizontal frames into vertical frames. Along with the ability to modify existing frames within frames (delete, move, resize, add text or image) from pre-Mu4 scores is gone too.
                        • See the closed issue at https://github.com/musescore/MuseScore/issues/12930 and #339977: Unable to add Horizontal Frame into vertical frame, so this won#t come back

                        Showing Keys on play in the virtual piano keyboard

                        • See #338294: Piano keyboard UI not playing when selected/active staff is being being played resp. https://github.com/musescore/MuseScore/issues/14428

                        Saving parts as separate scores

                        • See https://github.com/musescore/MuseScore/issues/15582

                        Color transparency, alpha channel

                        • See https://github.com/musescore/MuseScore/issues/13652

                        Features not present in MuseScore 3

                        These are features that were either removed prior to MuseScore 3, or implemented afterwards but never part of any official release, that are worth noting here.

                        Multi-measure repeat playback (back in 4.1)

                        • The layout of multi-measure repeats is working, but not the playback
                        • There was an incomplete PR for this - https://github.com/musescore/MuseScore/pull/11285
                        • The feature came back into 4.1 via https://github.com/musescore/MuseScore/pull/15952

                        Albums

                        • Feature was removed during the transition from MuseScore 2 to MuseScore 3. Got promised to get reimplemented for Mu3 by the staff, but that never happened
                        • It was mostly reimplemented for MuseScore 4 as a GSoC project that was never merged.
                        • It is expected to be redesigned and reimplemented for a post MuseScore 4.0 release, but so far there's no trace of this ever going to happen.
                        • See #289326: Re-implement the Album feature for Musecore 3/4 and https://github.com/musescore/MuseScore/issues/17868

                        Chord editor

                        A GSoC project never merged.

                        Regressions reported on GitHub

                        See https://github.com/musescore/MuseScore/labels/regression_ms3 (but not all regressions are marked as such)

                        MuseScore 4.0 support for older operating systems

                        Summary: MuseScore 4.0 will not run on 32-bit Windows and macOS 10.13. I have confirmed this with Tantacrul as per [MU4 Issue] nightly does not run on macOS 10.13 #8858

                        The MuseScore developer community uses a development environment Qt 5 to develop MuseScore 4.0. Qt 5 supports Windows 7, 8.1 and 10 (32-bit), and macOS 10.13. Unfortunately, Qt 5 is no longer supported by its vendor. We are planning a near-term transition to Qt 6, which desupports the above operating systems. To be compatible with what is (and is not) supported on Qt 6, MuseScore 4.0 has the following limitations:

                        • 32-bit Windows 7, 8.1 and 10 - no 32-bit MuseScore 4.0 binary available
                        • 64-bit Windows 7 and 8.1 - MuseScore 4.0 may work, even if untested and not supported.
                        • macOS 10.13 - Installer prevents MuseScore 4.0 from installing.

                        The following operating systems are the minimum required versions to run MuseScore 4.0 (nightly/development builds), first private Alpha and any subsequent versions)

                        • Windows 10 64-bit
                        • macOS 10.14
                        • Linux 64-bit (no specific versions)

                        According to Macs and maximum macOS versions, the Apple Mac computers that will not be able to run MuseScore 4.0 are 10+ years old.

                        We would have liked to support MuseScore on Windows 10 (32-bit) for the foreseeable future since Windows 10 is still supported until at least 2025. Unfortunately, this is just not possible. The nature of the IT industry makes software and hardware upgrades a "constant". A software project like MuseScore desupporting certain operating systems from time to time becomes inevitable.

                        We did not take the decision to remove support for the above-mentioned operating systems lightly. We also considered continuing support for these operating system versions on MuseScore 4.0 and only removing them once we switch to Qt 6. However, we decided against it, since users who had upgraded from 3.6.2 to 4.0 (and came to rely on it) would not be able to upgrade to 4.1 (for example) but would be stranded on 4.0 when 4.1 may have critical bug fixes or features that existed in 3.6.2 but were not implemented on 4.0.

                        Users are encouraged to upgrade their operating systems where possible, and if not, upgrade or replace their hardware.

                        For users who cannot upgrade to meet the above minimum requirements, MuseScore 3.6.2 will remain usable, and users on MuseScore 4.0 that need to exchange scores with others using MuseScore 3.6.2 and older can interoperate (Save as.. and open) files using MusicXML.

                        See GitHub pull request Update to Qt 6 #10108 to track the progress of compiling MuseScore 4 on Qt 6.

                        Getting started

                        See also: Command line options

                        Your first code contribution

                        So, you want to help develop and improve MuseScore?

                        Welcome to a passionate and dedicated team of volunteers from around the world.

                        This is how it generally works:

                        If you see an area that could benefit from improvement, then jump right in!

                        • There are a number of issues that have been identified as a good entry point for beginners here.
                        • If you become unsure, ask questions.
                        • If you are about to make a significant, or potentially controversial change, discuss it beforehand.
                        • Share your improvements early and openly. That way, people can let you know if you're on the right track.

                        How to write a good bug report: step-by-step instructions

                        See How to write a good bug report: step-by-step instructions

                        How to use a debug version of MuseScore

                        Note: This page is from 2010 and out of date. Nightly builds can be downloaded from https://musescore.org/en/download#Nightly-versions. If want to run in "debug" mode, execute MuseScore from a terminal with " -d" as a command line option . However, this doesn't print out all the qDebug messages. If you want that, you will have to self compile MuseScore: https://musescore.org/en/developers-handbook/compilation.

                        A special "debug" version of MuseScore displays messages about each step that is happening inside the software. It can be useful for finding the source of bugs or problems with the software. The instructions below show how to use a debug version that is pre-built.

                        Important: the debug version is not a stable release and is only intended for testing a specific problem. Please use other versions of MuseScore for creating or editing normal scores.

                        Instructions for Windows

                        Download the "debug" version of MuseScore.
                        http://prereleases.musescore.org/windows/nightly/mscore-debug.7z

                        After you download the file, you will need to decompress the file using 7-Zip (as explained on the Windows nightly builds page ).

                        When the "debug" version is running it displays detailed information in a separate window called a "command prompt". The "command prompt" usually appears as a small window with white text on black background.

                        1. Open the uncompressed "mscore-debug" folder
                        2. Double-click "runDebug.bat". This should open the main MuseScore window and the debug window
                        3. Follow the exact steps that are causing problems for you in MuseScore and then choose File > Quit

                        The command prompt should remain open after you close the main MuseScore window. It is sometimes helpful to share the contents of the command prompt text when discussing a bug. However, the text is often lengthy so it is probably best to only share it if requested or if you notice something important. Copying text from the command prompt is different from any other program in Windows so the remaining steps describe this procedure.

                        1. Right click on the command prompt window and choose "Mark"
                        2. Click and drag to select the text. Make sure you get all the text
                        3. Press Enter. The text is now copied
                        4. You can now paste this text in other programs via the normal methods (Edit > Paste)

                        Command line options

                        This page is a duplicate of Command line options in the MuseScore 2 Handbook (actually the other way round), which is outdated and wrong. A more complete and correct version is in Command line options of the MuseScore 3 handbook

                        You can launch MuseScore from the command line by typing

                        mscore <options> <filename>

                        <options> and <filename> are optional.

                        The following options are available

                        -v
                        Displays the current version and revision numbers for MuseScore (Linux only)
                        -d
                        Starts MuseScore in debug mode
                        -D
                        Enables the plugin script debugger
                        -s
                        Disables the integrated software synthesizer
                        -m
                        Disables MIDI input
                        -n
                        Starts with the new score wizard regardless of preference setting for start mode (0.9.6 or later)
                        -L
                        Starts MuseScore in debug layout mode
                        -I
                        Displays all MIDI input on the console
                        -O
                        Displays all MIDI output on the console
                        -o <filename>
                        Exports the currently opened file to the specified <filename>. The file type depends on the filename extension. This option switches to the "converter" mode and avoids any graphical interface. You can also add a filename before the -o if you want to import and export files from the command line. For example mscore "My Score.mscz" -o "My Score.pdf"
                        -r <dpi>
                        Determines the output resolution for the output to "*.png" files in the converter mode. The default resolution is 300 dpi
                        -S <style>
                        Loads a style file; useful when you convert with the -o option
                        -p <name>
                        execute named plugin
                        -F
                        Use only the standard built-in presets or "factory-settings". For details, see Revert to factory settings
                        -e
                        Enable experimental features
                        -i
                        Load icons from the file system. Useful if you want to edit the MuseScore icons and preview the changes
                        -w
                        writeWorkspaceFile and converterMode
                        -c <pathname>
                        set config path
                        -t
                        enable Test Mode
                        -a <driver>
                        use audio driver: jack alsa pulse portaudio

                        Qt Toolkit Options

                        -style = style
                        Determines the style of the GUI application. Possible values are "motif", "windows" and "platinum". Depending on the platform other styles may be available
                        -style style
                        As above
                        -stylesheet = ss
                        Sets the application stylesheet. The value of "ss" is a path to a file that contains the stylesheet
                        -stylesheet ss
                        As above

                        Translating MuseScore

                        See Translation instructions.

                        MuseScore Development Blog

                        Welcome to MuseScore development news and digest blog

                        [2020-01-25]

                        FYI, processing scores on server was broken with 3.4 update. We had to create separate branch with the hotfix from pr #5639 (thanks to Howard!). Now, we are preparing hotfix update 3.4.1 and going to roll out it later today to prevent further bug reports asap

                        [2019-12-03]

                        We decided to revert the changes to the MuseScore_General soundfont due to the regressions.

                        Current soundfont version is 0.1.6.

                        [2019-03-06]

                        To collect artifacts from AppVeyor, add "collect_artifacts" to the commit message title. Read more

                        [2019-02-15]

                        AppVeyor updated Windows images. We are now able to build Windows packages of MuseScore 3 with Qt 5.12.

                        Thanks to @shoogle's PR, we now have both 32 and 64-bit nightly builds of MuseScore 3 based on Qt 5.12.

                        [2019-02-14]

                        We do have known issues with our CDN provider, so we temporarily switched all links to GitHub URLs. If you are not able to download the update or the package is incorrect, please download the packages directly from GitHub:

                        • Windows
                        • Linux
                        • MacOS

                        [2018-11-23]

                        We again exceeded maximum allowed artifact storage size on AppVeyor. Sent the request to AppVeyor's support.
                        This is the reason of failed AppVeyor checks.

                        FIXED at UTC 12:22

                        [2018-10-30]

                        Alpha 2 is very close to its release state.
                        We applied new categories in the issue tracker (see https://musescore.org/en/node/277397).

                        GSoC 2018 Project "Score Diff Tool" was merged to master. Welcome testing!

                        [2018-10-26]

                        A lot of pending PRs were merged yesterday including GSoC 2018 Project "Tours"

                        [FIXED] There is a known issue that Tour widget appears before closing Start Center window. We are working on the fix.

                        [2018-10-05]

                        As you probably know, we changed the file format to make Diff Tool work.
                        The last available builds which can open the old files from development version are:

                        • Linux
                        • Windows
                        • Mac

                        If you are testing issues in the tracker or you need to update your own files:

                        • Open the MuseScore version mentioned in the downloading links above
                        • Open old file you want to convert
                        • Save (or Save As) the file

                        After saving, the file can be opened in recent development builds as well as in all further alpha/beta/release versions.

                        [2018-09-20]

                        More than 1000 new users tried 3.0 alpha! Welcome aboard, brave people. :)

                        We changed the MuseScore file format a month ago to facilitate the introduction of a new tool: a scores comparator which shows the diff between two scores. From now on, you cannot open files created in early 3.0 development versions, so to use your files, open them in 3.0 alpha build and select "Save As... new file".

                        [2018-09-13]

                        We updated the authorization engine on the website which may affect different user scenarios related to personal settings.
                        Should you find something is broken, please let us know.

                        [2018-09-12]

                        MuseScore 3.0 alpha announced!

                        Highlight of the day:

                        • Werner is implementing optimized algorithm for collision detection. You can check out the actual (pretty good) state on Windows 64-bit, Mac and Linux 64-bit.

                        [2018-09-11]

                        We again exceeded maximum allowed artifact storage size on AppVeyor. Sent the request to AppVeyor's support.

                        UPD: AppVeyor increased the limit for us.

                        [2018-09-10]

                        Created new 3.0alpha branch based on the current master.
                        If you already did a checkout of the previous 3.0alpha branch, please force a new checkout with the recent changes.

                        [2018-09-09]

                        Reviewed all existing pull requests.
                        Closed outdated and already fixed ones.

                        Added new label "Priority" to define PRs which are aligned with the current most requested features.

                        [2018-09-08]

                        We made good progress and will keep working on the following issues organized in epics which are mostly about positioning elements and text:

                        • Positioning of the text in the layout
                        • Issues related to tempo elements including playback issues
                        • Displaying elements of the scores created in 1.X versions of MuseScore
                        • Displaying and positioning elements of the scores created in 2.X versions of MuseScore

                        We mostly finished solving issues related to continuous view and text editing:

                        • Text editing issues
                        • Continuous view related issues

                        [2018-09-06]

                        3.0alpha branch has been created.

                        We are preparing a MuseScore 3.0 public alpha release. Links to the packages are going to be put on the download page. This release is supposed to show the current state and the significant progress in 3.0 development as well as attract more users to test the editor.

                        All pull requests must be created against master as usual.

                        Compilation

                        Warning: This guide is accurate for MuseScore version 3.x, but has not been updated for version 4.0 and later. For instructions on building current versions of MuseScore Studio, please see the wiki on GitHub .

                        Compile instructions (All Platforms) - read this first and then see the pages below for instructions specific to your platform.

                        Windows

                        • Compile instructions (Windows - MinGW) - Git
                        • Compile instructions (Windows - Visual Studio)
                        • Compile instructions (Windows - MSVC with Qt Creator)

                        Mac

                        • Compile instructions (macOS) - Git
                        • Compile instructions (MU4 macOS with QtCreator) - Git

                        Linux & BSD

                        • Compile instructions (Linux & BSD) - Git

                        Most instructions for Linux and BSD are the same regardless of which distribution you use, but you'll need to read the distribution-specific instructions below for any aspects that are unique to your distribution (usually only the method of installing dependencies). If no page exists for your distribution then feel free to create one - use the closest matching distribution as a starting point. If the instructions for one distribution work for a different one (or only require a few minor changes) then just add a note to the top of that page rather than creating a new one.

                        Compile instructions (All Platforms)

                          This generic guide covers the steps to build MuseScore that are the same on all platforms. See the platform-specific guides for details that only apply to your platform.

                          Note to editors: Please do not duplicate information on this page in the specific guides. Where information is already given in multiple guides consider moving it to this page instead.

                          Prerequisites

                          Install Git and follow the steps in Git Workflow to get MuseScore's code repository on your machine.

                          Install CMake, Qt, and the other depedencies (or you can try to compile without them and then install them as needed based on error messages you see in the terminal).

                          All programs must be installed to a location mentioned in your PATH environment variable.

                          Basic steps

                          Once you have MuseScore's code and dependencies on your machine, the steps to compile are the same as for any CMake project. The following commands work on all platforms (Windows, macOS, Linux) and in all shells (Bash, PowerShell, CMD, etc.). Subsequent sections of this guide go into more detail about what the commands actually do.

                          mkdir my_build_dir                              # 1. Create build directory
                          cd my_build_dir
                          cmake .. -DCMAKE_INSTALL_PREFIX=my_install_dir  # 2. Configure (Mac: add `-GXCode`)
                          cmake --build .                                 # 3. Build
                          cmake --build . --target install                # 4. Install (optional)

                          These commands are likely to fail the first time you try. Pay attention to error messages displayed in the terminal output as they give clues about how to proceed.

                          Note to developers: Please ensure that error messages include information about what the problem is and also how to fix it. This reduces the need for people to rely on a written tutorial.

                          1. Create build directory

                          mkdir my_build_dir
                          cd my_build_dir

                          The build directory is where compiled code will go. You can name the build directory whatever you like.

                          Tip: You can create multiple build directories for different configurations of the project (e.g. different platforms, compilers, git branches, or build types such as Release and Debug). This saves having to do a clean build every time you switch configuration.

                          2. Configure

                          cmake .. -G[generator] -D[option]=[value]  # configure

                          During the configure step, CMake reads build rules from the top-level CMakeLists.txt and uses them to generate a native build system. This is just a new set of build rules that will work with whichever operating system, processor architecture, compiler toolchains, and IDE you happen to be using.

                          Note: Build rules are also taken from other CMakeLists.txt and *.cmake files in subdirectories mentioned in the top-level file.

                          CMake Generators

                          By default, CMake tries to guess which native tool you want to build with. If you want it to generate code for a different tool then you can tell it to do so using the -G[generator] option at the configure stage. On macOS, only the XCode generator is currently supported, so you must use it as follows:

                          cmake .. -GXCode -D[option]=[value]  # configure for XCode (only on macOS)

                          On other platforms you can use any available generator, or you can leave out the -G option to make CMake use the default one.

                          The CMake manual has a list of all generators and cmake --help will show the ones that are available on your system.

                          CMake Variables

                          You can pass options and variables to the configure step using the -D[variable]=[value] syntax. For example:

                          cmake .. -DCMAKE_INSTALL_PREFIX=my_install_dir  # configure with variable

                          This sets the CMake variable CMAKE_INSTALL_PREFIX to the value my_install_dir, which means that during the install step the compiled binary and accompanying resources (fonts, translations, templates, etc.) will be copied to a directory called my_install_dir inside your build directory.

                          Built-in variables

                          CMake's online documentation has a complete list of built-in variables. Here are some of the key ones:

                          • CMAKE_INSTALL_PREFIX - directory to install the compiled program and accompanying resources.
                            • The default locations are /usr/local on UNIX and C:/Program Files/${PROJECT_NAME} on Windows, but it's a good idea to use a relative path instead as this avoids the need for root/admin privileges during the install step.
                          • CMAKE_BUILD_TYPE - whether to create a Release or a Debug build.
                            • Developers usually set this to Debug because Release discards symbols necessary for debugging. Windows users might prefer RelWithDebug as this enables optimisations that increase performance while still retaining debug symbols.
                          • CMAKE_MAKE_PROGRAM - full path to native build tool (or just the tool's name if it's in PATH).
                            • You don't have to set this unless the tool has a non-standard name or location. MinGW users must set it to mingw32-make.exe.

                          Project variables

                          MuseScore defines it's own options and variables mostly in the top-level CMakeLists.txt. Examples:

                          • BUILD_64 - Enable 64 bit builds.
                            • Default is ON. Has no effect except with MSVC on Windows.
                          • MSCORE_INSTALL_SUFFIX - string to append to the name of the mscore binary to prevent conflicts.
                            • Has no effect except on Linux where MSCORE_INSTALL_SUFFIX=foo would give mscorefoo.
                            • Default value is "" (i.e. the empty string) so binary is just called mscore.
                            • Use values that start with -portable to enable AppImage builds on Linux.

                          Project variables are set on the command line with the -D option in the same way as other CMake variables:

                          cmake .. -DBUILD_64=OFF  # configure with option

                          If you need to call CMake with lots of options then you could create a shell script or batch file to make it easy to run the same commands again in the future. You may notice that there are some scripts in repository root folder that do this already (see the Makefiles and msvc_build.bat). These are provided as a convenience, but it is better to avoid them and write your own if you can. CMake's purpose is to abstract the build process so that it is the same on all platforms. Providing a separate script for each platform undermines this purpose and discourages developers from learning how to use CMake properly.

                          3. Build

                          cmake --build .  -j[CPUs]

                          During the build step, CMake runs the native build tool on the generated build system. This compiles the C++ code and creates the mscore binary.

                          Note: You could run the native tool yourself by calling make, xcodebuild or MSBuild.exe directly, but then you'd have to learn how to use that tool and all the options it takes. Fortunately, CMake provides the handy --build option that calls the native tool for you with all the right options.

                          Parallel builds

                          CMake 3.12 and later versions have a -j[number] option to set the number of build jobs to launch in parallel. For the shortest build time, set the number equal to the number of CPU cores available on your machine. Alternatively, you can set the environment variable CMAKE_BUILD_PARALLEL_LEVEL.

                          4. Install

                          cmake --build . --target install

                          During the install step, CMake again run the native build tool on the generated build system, but this time it specifically tells the tool to build the install target. The install target copies the compiled binaries and accompanying resources to the install directory specified in the configure step.

                          If you attempt to install to a system folder such as /usr/local or C:\Program Files then you will need to run the install command as root/admin privileges. This means using sudo on Unix or running from an Administrator prompt on Windows.

                          Note: CMake 3.15 and later versions have a dedicated --install option that does the same thing, but you can still use the old syntax if you prefer.

                          cmake --install .  # install with CMake 3.15 or later

                          Installing the project is optional. You can run the compiled mscore binary without installing it first but you won't be able to load the soundfont or templates untill you install.

                          Subsequent builds

                          You'd need to recompile the project whenever the code changes, but you don't have to go through all the steps from the beginning. You can usually get away with just running the build and install steps on subsequent builds. This applies even if you edit one of the CMakeLists.txt or *.cmake files; the build system will detect this during the build step and then rerun the configure step automatically.

                          Incremental builds

                          The build system CMake generates is clever enough to only recompile code files that have actually changed. This is known as an incremental build.

                          Clean builds

                          Occasionally it may be necessary to start again from scratch. This is known as a clean build. You have to do this if you want to use a different compiler, and you might find that it fixes other problems too.

                          You can use either of the following commands from within the build directory to clean it:

                          cmake --build . --target clean  # clean (i.e. delete compiled binaries)
                          cmake --build . --clean-first   # clean and then build

                          Alternatively, you can simply create a new build directory and run the configure step from inside it. Make sure you delete any old build directories that you no longer need because they take up quite a lot of space.

                          Compile instructions (Windows - Visual Studio)

                            Note: These instructions are for building MuseScore using the Microsoft Visual Studio 2019 (VS) integrated development environment with the Microsoft Visual C++ (MSVC) compiler. If you are familiar with the QtCreator IDE or want a better experience editing .ui files, see the instructions for Qt Creator and MSVC instead.

                            Maintainers: This guide is currently valid for Visual Studio 2019. Please update it for future VS versions rather than creating a new one.

                            1. Prerequisites

                            You will need the MuseScore source code, as well as several programs and libraries, to be able to build MuseScore with Visual Studio.

                            1.1 MuseScore source code

                            • Check out the MuseScore source code (see the suggested workflow).
                            • Make sure that the path to your MuseScore checkout folder:
                              • isn't too long;
                                • Long paths can cause build errors. The longest path in the source tree is ~235 characters (may be different at time of reading). Windows MAX_PATH is 260, but could be shorter in certain instances.
                              • doesn't contain any spaces; and
                              • doesn't contain any non-ASCII letters (e.g., a Cyrillic username).
                            • If you're using VS2017: Not recommended. Modify CMakeSettings.json and replace all occurrences of Visual Studio 16 2019 with Visual Studio 15 2017. Make sure not to commit these changes to any pull requests.

                            1.2 Visual Studio

                            These instructions are for building MuseScore with VS2019. Any edition of this version of Visual Studio should work, including the Community edition, which is full-featured and free to use for open-source projects.

                            Whether or not you already have Visual Studio installed, please read these instructions carefully, as you might need to install some additional components.

                            • If you do not already have VS2019 installed, download Visual Studio Community.
                            • When you run the Visual Studio installer (either for the first time, or after installing, to change options), you will get eventually to the Workloads tab. Make sure the Desktop development with C++ option is selected.
                              Visual Studio installation, selection of C++ workload
                            • Switch to the Individual components tab and make sure the following options are all selected:
                              • VS2019:
                                • Code tools:
                                  • Git for Windows
                                  • Help Viewer
                                • Compilers, build tools, and runtimes:
                                  • C++ CMake tools for Windows
                                  • MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.25) (or the latest version available)
                                  • Windows SDK, depending on your OS:
                                    • Windows 10 SDK (10.0.20348.0 or later)
                                      • This version contains necessary WinRT libs
                                      • If the above SDK does not show up in the VS Installer, you can find the appropriate SDK at the Microsoft SDK Archive.
                                    • Windows 11 SDK (latest)
                                  • Uncategorized:
                                  • GitHub Extension for Visual Studio
                                • Note that as of 484f8dc, 09Oct2020, Qt 5.15 (and a C++17 capable toolchain, which with MSVC 2019 is a given) is required for the master branch.
                            • Now, let it install (or update), grab a coffee (or a tea, a soda, a beer… whatever you prefer), and be patient.
                            • Once Visual Studio has been installed, start it and link it with your Microsoft account. (If you don't have one, create one).
                            • Go to Extensions > Manage Extensions (Tools > Extensions > Manage Extensions in older VS versions). On the left side of the dialog, select Online, then enter “qt” in the search box at the top right, and select and install Qt Visual Studio Tools. Although this is not strictly needed, it can be handy later.
                              Install Qt Visual Studio Tools
                            • While you are here, you can go to Tools > Options… and review and edit the editor options to your liking. (This can be done per-language, and there are tons of settings!)

                            1.3 CMake

                            CMake is used for generating the Visual Studio solution and project files needed for building MuseScore.

                            If you're building a standard build, Visual Studio will automatically use its own internal copy of CMake, so you don't need to download it separately.

                            If you're building an advanced build, you will need to download and install CMake.

                            (For information on the difference between standard and advanced builds, see building.)

                            • Download and install CMake.
                            • Add the CMake bin subfolder to the Path environment variable; typically, this will be %ProgramFiles%\CMake\bin.

                            1.4 Qt

                            You will need the Qt libraries, minimum version 5.15.2, to be able to build MuseScore. For the 3.x branch Qt 5.9 is sufficient (but the others work too, but as of 583c71c, 01Dec2020, the builds don't run when build with Qt 5.15, they crash on start or when opening a pre-3.6 score... no longer the case fortunately since at least 3.6RC), for the master branch as of 484f8dc (09Oct2020) you'd need 5.15. Go for 5.15.2, the latest and last publicly available Qt 5 release (MuseScore isn't yet ready for Qt 6, or the other way round).

                            • Go to Download Qt: Get Qt Online Installer and follow the steps to download and launch the online installer.
                            • If you're not in the US or Europe, you'll probably want to launch the installer with a specific mirror, as per https://wiki.qt.io/Online_Installer_4.x#Selecting_a_mirror_for_opensour…
                            • Install Qt in the default location.
                            • Ensure you select custom install
                            • Choose a Qt version (5.15.2, but see above) and install the following components for that version:
                              • MSVC 2019 64-bit (Qt 5.15)
                              • Qt WebEngine (not needed anymore for the master branch)
                              • Qt Network Authorization
                              • Optional, for 32-bit builds of MuseScore: MSVC 2017 32-bit (not available for Qt 5.9.9; instead, install MSVC 2015 32-bit, which will also work for VS2017 and VS2019, or MSVC 2015 32-bit for Qt 5.15)
                              • Optional, to make debugging easier: Qt Debug Information Files (not available for Qt 5.9.9)
                            • Add the path of the Qt bin subfolder (e.g., C:\Qt\5.12.9\msvc2019_64\bin) to the PATH environment variable.
                              Tip: If you get CMake “can't find resource” failures later on, it's probably because the path of the Qt bin subfolder has not been correctly added to the PATH environment variable.
                            • Remove the MinGW C:\Qt\5.*\mingw*\bin folder from the PATH environment variable, if present.

                            1.5 JACK

                            NOTE: as of 1220175, 04Dec2020, JACK is no longer needed nor supported in the master branch, however it is needed if you wish to build 3.6.2 or earlier.

                            • Download the 64-bit Windows installer for the latest version of JACK.
                            • Install JACK in the default location.

                            1.6 7-Zip

                            You will need a utility that handles .7z compressed files. 7-Zip is open-source, free, and quite powerful, but there are alternatives that will work as well.

                            1.7 Additional dependencies

                            There are several additional dependencies:

                            • LAME
                            • libogg
                            • libsndfile
                            • libvorbis
                            • libvorbisfile
                            • Portaudio
                            • WinSparkle
                            • zlib

                            All of these are open-source projects. Although it is possible to download them individually and build them yourself to create the required libraries, it is much easier to use prebuilt libraries and include files.

                            • Download dependencies.7z.
                            • Extract the contents of dependencies.7z into the MuseScore checkout folder. (This will create a new dependencies subfolder within.)

                            NOTE: as of 1220175, 04Dec2020, LAME and PortAudio are no longer needed nor supported in the master (4.0) branch. They are still needed if you wish to build 3.6.2 or earlier versions.

                            2. Building

                            Before you can build MuseScore, you need to download and install all of the prerequisites.

                            MuseScore can be built in three different configurations:

                            • Release: Runs fast with all performance optimizations enabled, but very difficult to debug.
                            • Debug: Very easy to debug, but runs very slow because all performance optimizations have been disabled.
                            • RelWithDebInfo: A compromise between Release and Debug. Runs faster than Debug but is more difficult to debug; conversely, easier to debug than Release but runs somewhat slower.

                            For each of these three configurations, MuseScore can be built for either 32-bit or 64-bit Windows.

                            A standard build of MuseScore uses the RelWithDebInfo configuration for 64-bit Windows. To build this, follow the procedure for a standard build.

                            To build MuseScore in other configurations, or for 32-bit Windows, follow the instructions for advanced builds.

                            2.1 Standard build

                            • Open Visual Studio.
                            • Go to File > Open > Folder… and open the MuseScore checkout folder.

                              Visual Studio will automatically begin to generate a CMake cache, which will include the Visual Studio solution and project files.

                              In Visual Studio, a solution is a collection of projects, grouped together, and sharing some basic characteristics. A project corresponds to a specific output being generated (such as an executable or a library). A project can exist by itself or within a solution, and a solution can contain one or more projects. CMake creates a single solution, with a different project for each logical component of MuseScore. The MuseScore solution contains over two dozen projects.

                              CMake cache generation will take a while. Watch the Output window and wait for the completion message to appear: CMake generation finished.

                              If everything has worked as it should, Visual Studio will have created a Visual Studio solution file called mscore.sln inside the msvc.build_x64 subfolder of the MuseScore checkout folder, along with a collection of Visual Studio project files (*.vcxproj).

                            • The recommended process for running/building is:

                              • Go to File > Close Folder to close the MuseScore checkout folder.
                              • Go to File > Open > Project/Solution…, then navigate to the msvc.build_x64 folder and open the mscore.sln Visual Studio solution file.

                              The Solution Explorer window should look like this:

                              The Visual Studio Solution Explorer window

                              Note the small red “minus sign” icons to the left of each project. Those icons mean that the project files are being excluded from the Git repository. Any directories or files with this icon are excluded and will not be included in any commits that you make.

                            • In the Solution Explorer window, select the mscore project, then go to Build > Build mscore. (Alternatively, right-click the mscore project and choose Build from the popup menu.)

                              Building will take a while. Visual Studio will automatically build all of the other projects that mscore depends on. Watch the Output window and wait for the completion message to appear:
                              ========== Build: 25 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

                            • In the Solution Explorer window, select the INSTALL project, then go to Build > Build INSTALL. (Alternatively, right-click the INSTALL project and choose Build from the popup menu.)

                              Watch the Output window and wait for the completion message to appear:
                              ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

                              Note: Make sure MuseScore4.exe is not running when building INSTALL.

                            2.2 Advanced builds

                            To generate an advanced build, use the msvc_build.bat batch file at a Command Prompt instead of building from within Visual Studio.

                            1. Exit Visual Studio if it's running.
                            2. Delete the msvc.build_x64 or msvc.build_x86 and msvc.install_x64 or msvc.install_x86 subfolders of the MuseScore checkout folder or run msvc_build.bat clean
                            3. Make sure that CMake is installed and that its bin subfolder has been added to the PATH environment variable.
                            4. Make sure that the bin subfolder of an appropriate build of Qt (e.g., 32-bit for a 32-bit build) is the one that has been added to the Path environment variable.
                            5. Open the msvc_build.bat batch file in a text editor (such as Notepad) to read the instructions in the comments at the beginning of the file.
                            6. Run the msvc_build.bat batch with the options you thing to need, e.g. msvc_build.bat RelWithDebInfo 32.

                            3. Running

                            Before you can run MuseScore, you must build it.

                            Run MuseScore4.exe from inside the msvc.install_x64\bin or msvc.install_x86\bin subfolder of the MuseScore checkout folder. (Do not run the copy of MuseScore4.exe inside the msvc.build_x64\main\RelWithDebInfo or msvc.build_x86\main\RelWithDebInfosubfolder of the MuseScore checkout folder.)

                            4. Debugging

                            Before you can debug MuseScore, you must build it.

                            • Start Visual Studio and open the mscore.sln solution file.
                            • Click the ▶ Local Windows Debugger button on the main toolbar, or go to Debug > Start Debugging, or press F5.
                            • Watch the Output window for debug messages.

                            Compile instructions (Windows - MinGW) - Git

                            Introduction

                            From revision 5b7c72a onwards, committed 5th January 2018, the development version of MuseScore (master) on Windows requires Qt 5.9 or newer and a C++11 capable toolchain.

                            From revision 0128daf onwards, committed 1st November 2018, the development version of MuseScore (master) on Windows also builds with Qt 5.12 (and therefor in 64bit mode, since Qt 5.12.2 32bit is also possible). To build with Qt 5.9 or anything prior to Qt 5.12 (and therefore in 32bit mode only), or using MinGW 32-bit inQt 5.12.2 and later, the BUILD_64 setting needs to get switched off manually, this doesn't get detected automatically
                            As of 484f8dc, 09Oct2020, Qt 5.15 (and a C++17 capable toolchain) is required for the master branch. The 3.x builds don't run when build with Qt 5.15, as of 583c71c, 01Dec2020, it crashes on start or when opening a pre-3.6 score... Apparently and fortunately this seems to no longer happen, since at least 3.6RC, so it is again possible to build 3.x with Qt 5.15(.2).
                            The 2.x branches require Qt 5.4 however, as QtWebKit is needed, and that had been removed in post 5.4 versions of Qt for Windows.

                            To prevent any compatibility issues, it is essential to compile MuseScore with the same type and version of compiler as was used to build Qt.

                            N.B. The instructions on this page are only applicable to MuseScore from the above revision onwards. If you are compiling MuseScore 1.3, or an older revision of the git repo, you need to follow the older version of these instructions, as it may require different versions of Qt and GCC.

                            What you need

                            Tools

                            The following tools need to get installed on your computer.

                            7-Zip utility

                            Some of the files to be downloaded are compressed using 7-Zip compression. If necessary, download and install 7-Zip.

                            MinGW 5.3.0 and Qt 5.9 (or MinGW 7.3.0 and Qt 5.12 or MinGW 8.1.0 and Qt 5.15)

                            Fresh install:
                            Download the Qt Online Installer for Windows.

                            NB There are a number of Windows installers on this page - make sure it is the Online Installer you are downloading.

                            Run the installer and install Qt in C:\Qt. You just need the Qt libraries for MinGW 5.3.0 and the MinGW 5.3.0 toolchain (or those for MinGW 7.3.0 resp. MinGW 8.1.0)

                            Qt Install, for MuseScore 2.x add Qt 5.4/MinGW 4.9.1 (32bit) OpenGL and Tools/MinGW 4.9.1

                            (optional) Add the following directories to your %PATH%

                            C:\Qt\Tools\mingw530_32\bin
                            C:\Qt\Tools\mingw530_32\lib
                            C:\Qt\5.9.9\mingw53_32\bin
                            C:\Qt\Tools\QtCreator\bin
                            

                            Update to Qt 5.9.9
                            Launch the Qt Maintenance Tool (C:\Qt\MaintenanceTool.exe).
                            First this tool will need to update itself, so select the Update components option. Once you've gone through all the steps, press the Restart button.

                            For this 2nd pass, select the Add or remove components option. In the select components screen, your currently installed components are preselected. Make sure to add ticks for the Qt libraries for MinGW 5.3.0 and that toolchain (see image from fresh install above).

                            CMake

                            Download the latest version of windows binaries for CMake. Choose the Windows (Win32 Installer) version. You need at least version 3.0. Versions up to 3.11.3 are known to work too (3.11 may emit some warnings reg. decrecated policies though). 3.5.1 is known to cause issues if not last in PATH.
                            As of 29. October 2020 the master branch requires Cmake 3.4 or later, but see below and use the one the Qt Installer provides, which is quite a lot newer.

                            Install in the default location (probably C:\Program Files\CMake or C:\Program Files (x86)\CMake) and optionally put the bin subdirectory into your PATH.
                            For 3.5 and later make sure it is in PATH after the 3 Qt mingw directories (see above).

                            The Qt Installer (see above) meanwhile does offer CMake too, and also auto-updates it at times, so might be the better choice.

                            Source Code

                            Get the source code from GitHub. If you need a Git client, you can try Git for Windows or the GitHub windows client.
                            git clone git://github.com/musescore/MuseScore.git

                            If you plan to contribute to MuseScore, you can setup your own fork on GitHub and clone it instead. See the Git workflow page.

                            Note: Directory names with spaces in them cause the build to fail; so avoid spaces in the name of your clone directory.

                            (optional but recommended) In your clone directory, copy the file build/git/hooks/post-checkout to the directory .git/hooks in order for mscore/revision.h to be maintained automatically by git. See build/git/hooks/README for details. Note that the .git directory is hidden.

                            %PATH% summary

                            You must have the following in your %PATH%:

                            • C:\Qt\Tools\mingw530_32\bin (or wherever MinGW is installed for you)
                            • C:\Qt\Tools\mingw530_32\lib (or wherever MinGW is installed for you)
                            • C:\Qt\5.9.9\mingw53_32\bin (or wherever Qt is installed for you)
                            • C:\Program Files\CMake\bin (or wherever you installed CMake)
                            • C:\Qt\Tools\QtCreator\bin If you want to launch QtCreator from the command line

                            NOTE: You can add path elements to cmd shells via Computer / System Properties / Advanced System Settings / Environment Variables. However, the make process can be sensitive to the rest of the contents of your %PATH% as well. If you encounter issues like mingw32-make immediately terminating with error code 0xc00000fd, then try stripping your path down to only the above elements, plus perhaps C:\Windows and C:\Windows\System32. You might consider running the build from a batch file that temporarily sets your %PATH% to just the required elements.

                            A good approach to doing so is to create the following batch file in the "C:\Qt" folder:

                            C:\Qt\qt.bat

                            @echo off
                            echo Setting up a MinGW/Qt only environment...
                            echo -- Set QTDIR to C:\Qt\5.9.9\mingw53_32
                            set QTDIR=C:\Qt\5.9.9\mingw53_32
                            echo -- Set PATH to %QTDIR%\bin
                            set PATH=%QTDIR%\bin
                            echo -- Adding C:\Qt\Tools\mingw530_32\bin;C:\Qt\Tools\mingw530_32\lib to PATH
                            set PATH=%PATH%;C:\Qt\Tools\mingw530_32\bin;C:\Qt\Tools\mingw530_32\lib
                            echo -- Adding %ProgramFiles%\CMake\bin
                            set PATH=%PATH%;%ProgramFiles%\CMake\bin
                            echo -- Adding to C:\Qt\Tools\QtCreator\bin
                            set PATH=%PATH%;C:\Qt\Tools\QtCreator\bin
                            echo -- Adding %SystemRoot%\System32 to PATH
                            set PATH=%PATH%;%SystemRoot%\System32
                            echo -- QMAKESPEC set to win32-g++
                            set QMAKESPEC=win32-g++
                            cd %USERPROFILE%
                            echo -- Set MAKEFLAGS to -j %NUMBER_OF_PRCESSORS%
                            set MAKEFLAGS=-j %NUMBER_OF_PROCESSORS%
                            rem un-rem the last line to start Qt Creator immediately
                            rem using /low makes sure you can still work with the PC
                            rem -lastsession gets you back where you left
                            rem start "" /low qtcreator -lastsession
                            

                            Then create a shortcut to this batch file somewhere in the Programs menu. If starting QtCreator immediately, the shortcut can be set to "Start minimized".

                            (Note: if you don't want to launch qtcreator from a bat file, you can still set MAKEFLAGS to a hardcoded value directly inside of qtcreator by going to Projects->Build->"Build Environment" and adding a variable MAKEFLAGS with value "-j 4" for 4 or any number of compile threads.)

                            Dependencies

                            In addition to Qt, MuseScore depends on:

                            • portaudio to access Windows audio
                            • JACK to connect to JACK Server for MIDI and audio
                            • libsndfile for wav/ogg/flac output
                            • Ogg and Vorbis for support of ogg soundfonts
                            • LAME for support for MP3 (only the header files, lame_enc.dll is optional in master as of f99613f, but mandatory in 2.2 as of 2b8c11d, 27/28 Feb 2018)

                            NOTE: as of 1220175, 04Dec2020, PortAudio and LAME are no longer needed nor supported in the master branch.

                            One way is to put most of these dependencies directly in the MinGW include path. This may be ugly, but is pretty convenient. Either follow the below instructions or take this archive, unpack lib and i686-w64-mingw32 to C:\Qt\Tools\mingw730_32\ resp.C:\Qt\Tools\mingw530_32\ (C:\Qt\Tools\mingw491_32\ for 2.x branches) and Jack to C:\Program Files (x86)\ (these files are used for the development builds) or install just Jack and for the rest take Qt-additions.zip and unpack it into C:\.
                            As of 5d889d7 (27Apr2019) there is another and cleaner way (and one that also works for 64bit builds): use the same method as for the MSVS/VC builds, see https://musescore.org/en/handbook/developers-handbook/compilation/compi…, i.e. grab this dependencies.7z and extract the contents into the base dir. (This will create a new dependencies folder in that base dir.)

                            libVorbis, libVorbisFile, libOgg

                            The latest source also requires libraries for Vorbis and Ogg.
                            1. Get the library files for libVorbis and libOgg from: http://www.xiph.org/downloads
                            2. Copy the directories: include\vorbis and include\ogg into C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include (Copy the entire directory so that you end up with C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\vorbis and C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\ogg)
                            3. Get the Vorbis Tools and copy libogg.dll, libvorbis.dll and libvorbisfile.dll into C:\Qt\Tools\mingw530_32\lib (You need to decompress the .7z file using 7 Zip)

                            Portaudio
                            1. Get portaudio.dll from a previous MuseScore install (bin directory) and copy to C:\Qt\Tools\mingw530_32\lib
                            2. Get portaudio.h from the current version at http://www.portaudio.com/download.html and copy to C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include. You need to decompress the .tar.gz file using 7 Zip, as before.

                            NOTE: as of 1220175, 04Dec2020, PortAudio is no longer needed nor supported in the master branch.

                            JACK
                            1. Download the Windows installer (32-bit) for JACK from https://github.com/jackaudio/jackaudio.github.com/releases
                            2. Install
                            3. The build process assumes you installed in a directory Jack in your program files directory. The name of the program files directory can vary depending on the version and language of Windows. The environment variable %ProgramFiles% or %ProgramFiles(x86)% is used to find the directory. On an English version of Windows this will result in looking in C:\Program Files\Jack or in C:\Program Files (x86)\Jack on a Windows 64-bit
                            libsndfile
                            1. Windows binary available, choose Win32 http://www.mega-nerd.com/libsndfile
                            2. Install and go to the installation directory. The installation process is required to be run in administration mode.
                            3. Copy include\sndfile.h into C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include
                            4. Copy bin/libsndfile-1.dll into C:\Qt\Tools\mingw530_32\lib
                            LAME
                            1. Download the current source files for LAME: http://lame.sourceforge.net/download.php
                            2. You need to decompress the .tar.gz file using 7 Zip, as before
                            3. Create a new folder in the C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include directory called lame
                            4. Copy include\lame.h into C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\lame
                            5. (optional for master branch as of f99613f, but mandatory in 2.2 as of 2b8c11d, 27/28 Feb 2018, not needed nor used before that) Get lame_enc.dll (e.g. from the Qt-additions.zip below) and copy to C:\Qt\Tools\mingw530_32\lib

                            NOTE: as of 1220175, 04Dec2020, LAME is no longer needed nor supported in the master branch.

                            Compilation

                            If you wish to use the QtCreator IDE, follow the instructions in section "Qt Creator IDE", below.

                            Open a command line, possibly using a batch file such as qt.bat given above.
                            Browse to the directory where you checked out musescore
                            Enter
                            mingw32-make -f Makefile.mingw release
                            or
                            mingw32-make -f Makefile.mingw debug
                            Note that the two options internally set different flags for the compiler. In debug mode the QT_DEBUG flag is used, so conditional code controlled by #ifdef QT_DEBUG is compiled. In release mode NDEBUG is set. Unless you are building a release, it is suggested that you use the "debug" option, like in the section on the Qt Creator IDE (below).

                            Be patient ... On my Vista laptop (Intel T7550) it takes more than one hour to build. Build times on Windows can be more than twice as long as build times on Ubuntu (using the same computer). Once the compilation finishes, the MuseScore executable can be found in build.release/mscore/MuseScore.exe or build.debug/mscore/MuseScore.exe. So long as C:\Qt\Tools\mingw48_32\lib is in the PATH, it should not be necessary to copy any DLLs. However, it has been found necessary to copy the complete directories iconengines and imageformats from %QTDIR%\plugins to the build.release/mscore or build.debug/mscore directory (resulting in, for example, build.debug/mscore/iconengines. This should be sufficient for most development work.

                            Note: You may need to go into the preferences, and fix the paths to have Windows-style slash characters (backslash), or you may see error messages about not being able to open files. [Is this a bug?]

                            If you need the language files, instrument list, templates, and the normal directory structure of a installed version of MuseScore then type:
                            mingw32-make -f Makefile.mingw install

                            or, for a debug build:
                            mingw32-make -f Makefile.mingw installdebug

                            Once install has finished look in the current directory for win32install/bin/MuseScore.exe. In this case there is no need to copy DLLs or the plugins directories, as they are already copied during the make process.

                            Qt Creator IDE

                            Note: These instruction are know to work up to QtCreator 3.6.1. For instructions for QtCreator 4.x see Qt Creator 4.x compile instructions instead.

                            Once you setup everything above, you can open Qt Creator, either by typing start qtcreator from within a command prompt started as above, or by creating a separate batch file with start qtcreator as the last command.

                            Go to File ⇒ Open File or Project....

                            Choose CmakeLists.txt file type and open the file CmakeLists.txt from your source directory.

                            Now it will take you through a pathwizard:

                            1. Build Location:
                              For the first Cmake run, it will offer a build directory such as MuseScore-build, if MuseScore is your checkout directory. Change this to choose a build directory of MuseScore/build.qtc instead.
                              Please make sure the name of your build directory does not contain spaces.
                            2. Choose CMake Executable:
                              Browse to where you installed CMake (i.e. C:\Program Files (x86)\CMake\bin)
                            3. Run CMake:
                              Then input the following arguments for CMake:
                              -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_TOOLCHAIN_FILE=build/mingw32.mingw.cmake -DCMAKE_INSTALL_PREFIX=../win32install

                            Note: the -DCMAKE_TOOLCHAIN_FILE=build/mingw32.mingw.cmake is needed the first time, but leads to a warning about being unused on subsequent times...
                            Note: as of 9caf157 (for the master branch) this file build/mingw32.mingw.cmake no longer exists and so the -DCMAKE_TOOLCHAIN_FILE=build/mingw32.mingw.cmake needs to get removed from the config.

                            As for the manual build, the supplementary DLLs should be found via C:\Qt\Tools\mingw530_32\lib in the PATH, so no further setting of environment variables should be required.

                            Before your first build or debug session, you will need to configure the Build, Deploy, and Run steps. Click Projects at left, then Build toward the top of the screen. Under Build Steps, expand the Details button and add a checkmark next to the lrelease target.
                            Then go back to the top of the screen and click Run. On this screen, you will first need to click Add Deploy Step. Select Make, then select install under Targets. Finally, you will need to click the Add button under Run Configuration to add a custom executable, and set it to %{sourceDir}\win32install\bin\MuseScore.exe.

                            To compile the debug build and start debugging go to Debug ⇒ Start debugging ⇒ Start debugging or simply click the debug icon. You have access to Qt help, completion, and debugging features!

                            Known problems

                            Note that there is a bug in the Qt Creator debugger. In some cases it will crash when a QPrinter object is instantiated (http://bugreports.qt-project.org/browse/QTBUG-14048). This happens when you print (of course!).

                            upload
                            Attachment Size
                            Qt-additions.zip 3.58 MB

                            Qt Creator 4.x compile instructions

                            Introduction

                            This page is a walkthrough for setting up MuseScore debugging with Qt Creator 4.x. It assumes you have completed all steps from Compile instructions (Windows - MinGW) - Git before starting.

                            Configuration

                            1. Once you setup everything above, you can open Qt Creator, either by typing start qtcreator from within a command prompt started as above, or by creating a separate batch file with start qtcreator as the last command.
                            2. Go to File ⇒ Open File or Project....
                            3. Choose CMakeLists.txt file type and open the file CMakeLists.txt from your source directory. This will lead to a screen to start configuring the project.

                            Build Location

                            Make sure to change the build directory to be build.qtc directly under the directory of your git clone. Please make sure the name of the build directory does not contain spaces.

                            In the screenshot, the project was cloned into MuseScore_git, so this results in the following setting:

                            01_configure.png

                            Click on Configure Project to continue.

                            Build Settings

                            Navigate to Projects ⇒ Build & Run ⇒ Build to adjust the following CMake settings:

                            BUILD_64
                            OFF for 32-bit builds
                            CMAKE_INSTALL_PREFIX
                            ../win32install (use ..\win64install for 64-bit builds, possible with Qt 5.12). Seems for master branch it is now one lever higher, so drop the ../.
                            CMAKE_BUILD_TYPE
                            DEBUG (Prior to cd19c84 for master and cba1df2 for 2.2 mind the uppercasing!, later builds are fine using the default value of Debug)

                            Additional changes for older versions before 9caf157 (5th January 2018)

                            02_Build_Settings.png

                            Click on Apply Configuration Changes
                            CMake will automatically run. You'll see a spinner over the CMake settings while it does.
                            Note: You might get a warning from CMake about QT_QMAKE_EXECUTABLE not being used.

                            Build Settings: selecting targets

                            Scroll a bit down to the Build Steps area. Expand the Details of that area and select the lrelease target.

                            04_Build_Settings_Steps.png

                            Use the button just below this list to add another Build step:

                            05_Build_Settings_Add_Step.png

                            And set it to the install target:

                            06_Build_Settings_Install_Step.png

                            Run Settings

                            In the left column of the screen, click on Run to switch to the Run Settings. Where the Run configuration is set, choose to Add a Custom Executable.

                            07_Run_Settings_Run.png

                            Finally, set the Executable value to %{sourceDir}\win32install\bin\MuseScore3.exe
                            (use win64install for 64-bit builds and MuseScore3.exe when building MuseScore 3, and MuseScore4.exe when building MuseScore 4)

                            08_Run_Settings_Run_exe.png

                            Before Debugging

                            These are some of the problems that you may or may not face while completing the next section.

                            1. The compile time for debug build will vary from 10 minutes (8 core system) to 1 hour (single core) depending on the number of cores that your system has.

                            2. One should disable the ClangCodeModel in the top bar under Help > Plugins > C++ otherwise you may get many C++ errors/issues. These don't prevent a build but may result in missing important warnings and real errors.

                            3. After step 2, if you get an error stating that libgcc_s_seh-1.dll not found under your mingw root directory's bin, then you're most probably building a 32-bit version, then you have to disable BUILD_64 from your building process. To do so go to Projects in the left hand side. Under Build & Run, click on Build. Where you previously set CMAKE_EXECUTABLE_PATH, there will also be a checkbox for BUILD_64. Disable that and then follow the instructions in the next section.

                            Most likely you will be able to compile successfully.

                            Debug

                            To compile the debug build and start debugging you can do either one of the following:

                            • Go to Debug ⇒ Start debugging ⇒ Start debugging
                            • Click the debug icon. (green arrow with bug on top of it in the bottom left of Qt Creator)
                            • Press F5

                            Parallel Build

                            If you have a multi-core/threading processor, compilation can be sped up significantly by allow Qt Creator to launch multiple parallel build processes. To achieve this, you can set -j%NUMBER_OF_PROCESSORS% in the Tool arguments for both the Build Steps as the Deployment Steps.
                            On a quad-core hyperthreading processor you could go up to -j8 to maximize the processor load. It might be wise to set the number to be one lower than your maximal number of processes, allowing you to perform another program while the build is running.

                            resfile.o Error

                            If you are facing errors which mention resfile.o in description like here (see https://musescore.org/en/node/151481), the following command line hack should help you.
                            The issue relates to incorrectly initialized windres tool and its path. To correctly initialize the related cmake data, please do the following:

                            1. Close QtCreator
                            2. Go to MuseScore repo
                            3. mingw32-make.exe -f Makefile.mingw debug
                            4. mingw32-make.exe -f Makefile.mingw installdebug
                            5. Open Qt creator and debug MuseScore

                            Additional changes for older versions before 9caf157 (5th January 2018)

                            On that same tab, go to Manage Kits…. Select the default kit and click the Change… button for the CMake Configuration setting. In the edit popup window, add CMAKE_TOOLCHAIN_FILE:STRING=build/mingw32.mingw.cmake or CMAKE_TOOLCHAIN_FILE:FILEPATH=build/mingw32.mingw.cmake as a new line and OK out of both popup windows.

                            Note: as of 9caf157 (for the master branch) this CMAKE_TOOLCHAIN_FILE:FILEPATH=build/mingw32.mingw.cmake is no longer valid and needs to get removed from the config.

                            03_Build_Setting_CMake_config.png

                            Compile instructions (Windows - MSVC with Qt Creator)

                              This page is instructions for how to use the MSVC compiler inside the Qt Creator IDE. This is useful to take advantage of Qt-specific features, like visual editing of UI files in Qt Creator's Design mode.

                              Getting the MSVC compiler

                              With Visual Studio

                              If you don't mind having multiple IDEs, the easiet way to get what you need to to follow the Prerequisites section of the guide for Visual Studio and then return here when done.

                              Without Visual Studio

                              Microsoft makes their build tools available separately to the Visual Studio IDE, so if you are using Qt Creator as your IDE then in theory it should be possible to compile MuseScore without also installing Visual Studio. Unfortunately this doesn't seem to be working at the moment, so the best thing to do is to follow the instructructions above to install with Visual Studio.

                              If you really want to try without Visual Studio (e.g. if short on disk space) then you can try installing just the C++ build tools. This has worked in the past, but fails with linker errors when last tried (November 2020). It's possible this could be fixed by using the right combination of include statements in MuseScore's header files, or by choosing the right combination of options in Microsoft's build tools installation wizard.

                              To install only the C++ build tools:

                              1. Visit this page and scroll down to All Downloads.
                              2. Expand the Tools for Visual Studio section.
                              3. Download Build Tools for Visual Studio.

                              Run the installer you downloaded, and when you get the the Workloads screen, ensure the C++ build tools option is checked. That's the only thing you need.

                              You can optionally look under the Individual components tab, where you should see the following items checked:

                              • Under Compilers, build tools and runtimes
                                • C++ [year] Redistributable Update
                                • C++ CMake Tools for Windows
                                • MSVC v[version] - VS [year] - C++ x64/86 build tools (v[version])
                              • Under Debugging and testing
                                • Testing tools core features - Build Tools
                              • Under Development activities
                                • C++ Build Tools core features
                              • Under SDKs, libraries and frameworks
                                • Windows 10 SDK ([version])
                                • Windows Universal C Runtime

                              It's possible that you don't need all of those components, but installing them does no harm (assuming you have enough space on your drive).

                              Getting the CDB debugger

                              The Windows 10 SDK offered with the Build Tools installer does not include debugging tools by default. To get the CDB debugger for Windows, you need to modify the SDK installation to include it.

                              1. In the Start menu, search for Add or remove programs and open it.
                              2. Find Windows Software Development Kit in the list of installed programs.
                              3. Click on it and select Modify. An installation dialog pop up.
                              4. Select Change and click Next. You should see this screen:

                                Windows_SDK.PNG

                              Select the Debugging Tools for Windows option and click Change.

                              Getting the Qt libraries and Qt Creator

                              If you already have Qt installed then you can simply run the Maintenance Tool that came with it (the tool is in C:\Qt or wherever you installed Qt). If you don't have Qt already installed, you need to download the Qt Online Installer for Windows and run that instead.

                              Ensure the following components are checked within the Maintenance Tool / Online Installer:

                              • Under the latest Qt 5.12 (currently Qt 5.12.9), the master branch meanwhile ( 484f8dc, 09Oct2020) even requires Qt 5.15 (currently Qt 5.15.1) and a C++17 capable toolchain, which comes as part of MSVC 2017/2019 and the MinGW for Qt 5.12 and later anyway).
                                • Select the prebuilt libraries for your MSVC compiler version (e.g. MSVC 2017 64-bit, MSVC 2019 64-bit for Qt 5.15)
                                  • The MSVC year does not have to match the version you installed earlier (though ideally it should)
                                  • The MSVC architecture must match the version you installed earlier
                                    • 32 bit Windows: you must install the 32 bit libraries
                                    • 64 bit Windows: you can choose either the 32 or 64 bit libraries, or both!
                                      • If in doubt, install only the 64 bit libraries. That is enough to compile MuseScore for your own machine. The 32 bit libraries are only useful if you want to compile for 32 bit computers.
                                • Select Qt WebEngine

                              If you want to be able to debug within Qt Creator (recommended), also check:

                              • Under Developer and Designer Tools
                                • Qt Creator (cannot be deselected)
                                • Qt Creator CDB Debugger Support

                              Click Next to install these components.

                              Getting the other dependencies

                              Download dependencies.7z and extract the contents into the base directory. (This will create a new dependencies folder in that base directory.)

                              Also install Jack.

                              Compiling on the command line

                              It's a good idea to make sure you can compile from the command line before you try to set up an IDE.

                              The following batch script has the commands need to set up the build environment and compile MuseScore. Modify the paths as neccesary for your machine, then save the file as msvc_build.bat inside your MuseScore code repostory.


                              REM Add Qt to PATH
                              SET "PATH=C:\Qt\5.12.9\msvc2017_64\bin;%PATH%"

                              REM Set up build environment (next line optional, but uncomment it if compiler is not found)
                              REM CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"

                              REM Tell MSVC to use all processor cores
                              SET "CFLAGS= /MP%NUMBER_OF_PROCESSORS%"
                              SET "CXXFLAGS= /MP%NUMBER_OF_PROCESSORS%"

                              REM Create build directory
                              IF not exist "my_build_dir\" MKDIR "my_build_dir"
                              CD my_build_dir

                              REM Configure, build and install MuseScore
                              cmake .. -DCMAKE_BUILD_TYPE=RELWITHDEBINFO -DCMAKE_INSTALL_PREFIX=my_install_dir
                              cmake --build . -j %NUMBER_OF_PROCESSORS%
                              cmake --build . --target install

                              ECHO "Executable location: my_build_dir\my_install_dir\bin\MuseScore4.exe"

                              Add the script's filename to .git/info/exclude to prevent it from being checked-in to the repository.

                              To run the script:

                              1. In the Start menu, search for CMD.
                              2. Type cd (change directory) followed by a space and the path to your MuseScore code repository
                                • e.g. cd C:\Users\[username]\MuseScore
                                • Press Enter to run the cd command
                              3. Type the name of the file msvc_build.bat and press Enter to run it.
                              4. If you need to run it again, simply press the Up arrow key to get the previous command back and press Enter to run it again.

                              The following shortcuts make command prompt much easier to use:

                              • Up and Down arrow keys: cycle through commands previously typed in this session
                              • Tab key: autocomplete a command, filename, or path (i.e. type a few characters then press Tab)
                              • Ctrl+C: stop a command that is taking a long time to complete
                              • Ctrl+Shift+C copy highlighted text (must be enabled in CMD Properties, see below)
                              • Ctrl+Shift+V paste text (must be enabled in CMD Properties, see below)

                              Clicking the CMD icon in the top left corner of the window brings up a menu with useful options, including Edit and Properties. You might want to go into Properties and enable "Use Ctrl+Shift+C/V as Copy/Paste". These are the standard copy and paste shortcuts available in most Command Prompt / Terminal applications on Windows and Linux.

                              Note: there are two other primary build modes, debug and release. Debug is not currently supported for MSVC due to linking errors.

                              Working in Qt Creator

                              IDEs are convenient for experienced users, but they introduce another layer of complexity. If something goes wrong then you might not know whether the issue is with the IDE or the compiler.

                              Editing files

                              To retain control over the compile process, you could choose to ignore Qt Creator's IDE features and just use it as a text editor for MuseScore's .cpp, .h and .ui files. Simply keep your Command Prompt open in a separate window, and press Up and Enter every time you want to recompile.

                              To set up a basic project where Qt Creator is only used as a text editor:

                              1. Within Qt Creator, go to File → New File or Project
                              2. Select "Import Project" and "Import Existing Project"
                              3. Enter project details:
                                • Name: "MuseScore" (or "MuseScore_Windows" if you share this folder with another OS)
                                • Location: "~/src/MuseScore" (or wherever the Git repo is on your system)
                              4. Choose the files to include in the project:
                                1. Filter the list by filetype:
                                  • Add *.ui to the list of types shown
                                  • Add * to the list of types hidden (hides everything else)
                                  • Now apply the filter.
                                2. Choose which files to include:
                                  • Uncheck all directories except libmscore, mscore and mtest
                                • Click "Next".
                              5. [Optional] Add the project to Git version control.
                                • You may prefer to use Git from the command line (recommended) or an external GUI tool.
                              6. Click "Finish".

                              Debugging

                              You can debug inside Qt Creator even if the program wasn't built in Qt Creator.

                              To set this up within your Qt Creator project:

                              1. Click Projects in the left panel
                              2. Find your Build Kit (e.g. Desktop Qt 5.15.1 MSVC2019 64-bit) on the left (you may only have one).
                              3. Click the Build project option.
                              4. In the CMake section, change the CMAKE_INSTALL_PREFIX option to the directory where you would like your compiled binary to be installed. (eg, C:\mscore-win64install). Click Apply Configuration Changes to commit your change.
                              5. Under the Build steps, expand the Details menu. Check lrelease and uncheck all.
                              6. Under Build Steps click Add Build Step/CMake Build. Under the Targets, check install and uncheck all. (Sometimes the checkbox list will be blank initially. If you click on another project and then click back this will often refresh the list)
                              7. Click on the Run project option. In the Run Settings window, under Run click Add... and then Custom Executable. You can now enter the custom path for your executable here. For example:
                                • Executable: C:\mscore-win64install\bin\MuseScore4.exe
                                • Arguments: -F (if you always want to debug in MuseScore's initial state)
                                • Working directory: %{buildDir}

                              Now when you want to debug, go to the Debug menu > Start debugging > Start debugging without deployment.

                              If you try to debug and see the message "Unable to create a debugging engine", make sure that you installed the Debugging Tools inside the Windows SDK and installed CDB Debugger Support in Qt Creator as explained earlier. If it still doesn't work then go to the Projects tab in the left panel, click "Manage Kits" and make sure the correct debugger is selected for you chosen kit.

                              Custom compilation

                              To avoid having to open CMD, you can tell Qt Creator to run your mybuild.bat script for you every time you press a compile button with Qt Creator itself. This gives you the best of both worlds: you get the convenience of an IDE but still have the flexibility and reliability of a separate build script.

                              To get Qt Creator to use your build script:

                              1. Click Projects in the left panel
                              2. Find your Build Kit (e.g. Desktop Qt 5.12.9 MSVC2017 64-bit) on the left (you may only have one).
                              3. Click the Build button to edit the build configuration and do the following:
                                1. Delete any existing Build Steps, then click Add Build Step > Custom Process Step
                                  • Command: mybuild.bat
                                  • Working directory: %{buildDir}
                                2. Delete any existing Clean Steps, then click Add Clean Step > Custom Process Step
                                  • Command: msvc_build.bat
                                  • Arguments: clean
                                  • Working directory: %{buildDir}

                              Now when you want to build, simply press the big green triangle with the bug in the bottom left of the screen. When you want to delete the build files and start again, go to the Build menu and choose "Clean Project".

                              Full project set-up

                              MuseScore uses the CMake build system. The "proper" way to set up a CMake project in Qt Creator is as follows:

                              1. Go to File > Open File or Project
                              2. Choose MuseScore's top-level CMakeLists.txt file

                              Qt Creator will spend a few minutes "configuring" the project, but once that's done everything is set up all ready for you to click "build". There's no need to go messing around with build and debug configurations, as Qt Creator does this automatically. At least, that's the theory...

                              In practice, the automatic method is vulnerable to changes in the CMake files, and it tends to break fairly often without reason. This forces you to run the configuration again, which takes a few minutes in Qt Creator (and other IDEs) but only takes a couple of seconds on the command line.

                              Ultimately, the most reliable way to compile is to copy whatever is done inside the build scripts used for MuseScore's CI tests. Build scripts will always use a command line method rather than an IDE.

                              Compile instructions (Linux & BSD) - Git

                                This guide is for compiling MuseScore from the source code for testing and/or contributing purposes. If you just want to test (and not contribute code changes) then you may find using a pre-compiled Development Build easier than compiling.

                                You shouldn't use this method to install MuseScore for everyday score editing. Instead, get the latest official release from the Downloads page. (Of course, if there's no package for your distribution then you have no choice but to compile.)

                                Get the source code

                                MuseScore uses Git for version control. Use these commands to get MuseScore's source code for building and testing purposes. (If you want to make changes to the code then substitute the clone URL for the URL of your own fork of MuseScore on Github, and also read Git Workflow.)

                                To get the latest code:

                                git clone git://github.com/musescore/MuseScore.git
                                cd MuseScore
                                

                                Note: the "git clone" command will put the code in a new folder called "MuseScore", so we use "cd" to enter the MuseScore directory. All subsequent commands in this guide should be run from the "MuseScore" directory.

                                To get a specific branch or tag:

                                # Fetch only the files required by (for example) the v2.0.2 tag:
                                # Note: Simply remove "--depth 1" if your git doesn't have that argument.
                                git clone --depth 1 git://github.com/musescore/MuseScore.git --branch v2.0.2
                                cd MuseScore
                                

                                This is useful if you were forced to compile MuseScore because no package was available for your distribution, or if you are building a package. Tags are more stable than development branches so their use is recommended in this situation.

                                Beware, the rest of this page might be deprecated

                                Please refer to the README.md in the git repository to get relevant information!

                                Build an executable file

                                Firstly, you should update the revision number that will be displayed in MuseScore's Help → About dialog. This is useful for tracking issues so this step should be done by everyone, including package maintainers. Simply do:

                                make revision
                                

                                If you don't already have a copy of MuseScore installed on your machine then you can compile the usual way:

                                # This causes conflicts if multiple versions are present and therefore is NOT RECOMMENDED
                                make
                                sudo make install
                                

                                This creates an executable file /usr/local/bin/mscore which can be run by typing mscore in the terminal.

                                However, if you do have (or plan to have) another version of MuseScore installed (e.g. via your distribution's package manager) then you'll probably want to be able to distinguish between them, so do this instead:

                                # Use SUFFIX and LABEL if multiple versions are installed to distinguish between them
                                make SUFFIX="-self" LABEL="Self Build"
                                sudo make SUFFIX="-self" LABEL="Self Build" install
                                
                                NOTE: make install is required, even for development. Because when runtime, built executable (CMAKE_BINARY_DIR/mscore/mscore) needs some installed files, for example, soundfonts, which is located at `/usr/local/share/mscore-VERSION/sound/`. Running the built executable without make install will cause crash.

                                This creates an executable file /usr/local/bin/mscore-self which can be run by typing mscore-self in the terminal. Alternatively, you can click on the relevant icon from your desktop launcher:

                                Launcher-Icons3.png

                                The label "Self Build" allows you to distinguish your compiled version from any other versions you might have installed (e.g. official releases or nightly builds). You can set SUFFIX and LABEL to anything you want (but no spaces in SUFFIX).

                                Additional information

                                You can stop reading here if you want. The following section is not required. However, it may give you some tips about custom installation or optional post-installation tasks.

                                Custom installation path

                                Note: it is no longer necessary to use PREFIX to avoid $PATH conflicts when installing multiple versions (you can use SUFFIX and LABEL instead). Of course, you might have other reasons for using PREFIX.

                                If you want to install MuseScore elsewhere (not in the default location /usr/local), you can specify the path as follows:

                                make revision
                                make PREFIX=$HOME/software
                                make PREFIX=$HOME/software install
                                

                                In this example, a local installation (only for the current user; no root privileges needed) is done. The resulting executable file is bin/mscore, located in the folder specified during build. For the above example, this gives $HOME/software/bin/mscore.

                                Keeping the source code up-to-date

                                Note: for more info about the development process with git, see Git Workflow .

                                The source code previously downloaded with git can be updated locally. Only new commits will be retrieved:

                                cd MuseScore
                                git pull
                                

                                Note about the first command: the folder MuseScore is the one created by git and where you performed the compilation.

                                After updating you will need to compile again using:

                                # Remember to change SUFFIX and LABEL here if you set them to something else previously
                                make revision
                                make SUFFIX="-self" LABEL="Self Build"
                                sudo make SUFFIX="-self" LABEL="Self Build" install
                                

                                'make' is clever and it will only get the compiler to compile the new files; unchanged files and files where no dependency has changed will not be recompiled, so it should be much faster than the initial compile. However, sometimes errors occur during compilation and it will be necessary to start again from scratch. To do this you must delete all of the intermediate object files (of which there are many!) that are created in the source code folder during compilation. Fortunately, there is a simple command to do this for you:

                                make clean
                                

                                The next time you try to compile the code, it will start anew.

                                Note: before using make clean you should read the notes for "Uninstalling MuseScore" (immediately below).

                                Uninstalling MuseScore

                                There is a Makefile target to uninstall, so removing MuseScore is effortless:

                                sudo make uninstall

                                Obviously you must run this from within the MuseScore source code folder (created by git) where you performed the compilation.

                                Note:

                                • You should always run make uninstall before you run make clean because it is not possible to do so afterwards.
                                • When running make uninstall or make clean it is not necessary to specify any variables (PREFIX, SUFFIX, etc.) even if you specified them during compilation.
                                • In the past there have been occasions where make uninstall was unavailable or broken on the latest development branch. In such cases, your last resort is to use a more arbitrary and dirty way to uninstall:
                                  xargs rm < install_manifest.txt

                                Tools for editing and debugging

                                MuseScore is a sophisticated program made up of millions of lines of code split among thousands of files. Although it is possible to edit the code in any text editor and build from the command line, there are specialised tools to make the challenge of coding and spotting errors in such a huge project much easier to manage:

                                Before Debugging

                                These are some of the problems that you may or may not face while completing the next section.

                                1. The compile time for debug build will vary from 10 minutes (8 core system) to 1 hour (single core) depending on the number of cores that your system has.

                                2. One should disable the ClangCodeModel in the top bar under Help > Plugins > C++ otherwise you may get many C++ errors/issues. These don't prevent a build but may result in missing important warnings and real errors.

                                Parallel Build

                                If you have a multi-core/threading processor, compilation can be sped up significantly by allow Qt Creator to launch multiple parallel build processes. To achieve this, you can set -j$(shell getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1) in the Tool arguments for both the Build Steps as the Deployment Steps. You can also manually set the number of threads, e.g. -j8.
                                On a quad-core hyperthreading processor you could go up to `-j8` to maximize the processor load. It might be wise to set the number to be one lower than your maximal number of processes, allowing you to perform another program while the build is running.

                                Qt Creator IDE - method 1

                                This is the normal way (but not necessarily the best way) to configure Qt Creator for a CMake project. The advantage of this method is that Qt Creator does most of the setup and configuration for you. The disadvantage is that the CMake configuration can break from time-to-time when MuseScore's CMakeLists.txt are changed. This method also makes it more difficult to compile MuseScore from the Terminal should you need to do so.

                                • If you haven't already, checkout MuseScore's code using Git (see main compilation guide above).
                                • Within Qt Creator, open ./CMakeLists.txt as your project file.
                                • When QT Creator asks for command line options for cmake, use
                                  -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG
                                • When QT Creator asks to Choose CMake Executeable, it's probably located at
                                  /usr/bin/cmake

                                To install MuseScore so all features will be available (e.g. SoundFonts and templates) do the following:
                                In "Build settings" set the Cmake setting CMAKE_INSTALL_PREFIX to install. Remember to click "Apply Configuration Changes".
                                In "Run settings" add a deploy step where target is install (cmake --build . --target install). Then add a "Custom Executable" run configuration with executable set to %{buildDir}/install/bin/mscore (if that does not work, try %{sourceDir}/install/bin/mscore).

                                Qt Creator IDE - method 2

                                This method bypasses Qt Creator's built-in handling of CMake and simply specifies some Terminal commands to build and run MuseScore. This makes it easier to build MuseScore outside of Qt Creator and ensures that you always use an up-to-date CMake configuration.

                                • If you haven't already, checkout MuseScore's code using Git (see main compilation guide above).
                                • Within Qt Creator, go to File → New File or Project
                                • Select "Import Project" and "Import Existing Project". Click "Choose".
                                • Name: "MuseScore_Linux", location: "~/src/MuseScore" (or wherever the Git repo is on your system). Click "Next".
                                • Add *.ui to the list of file types to be shown, and * to the list of types to be hidden (hides everything else) and then apply the filter.
                                • Uncheck all directories except libmscore, mscore and mtest and then click "Next".
                                • [Optional] Add the project to Git version control and click "Finish". (I prefer to use Git from the command line.)
                                • Now click the "Projects" button on the left side of the Qt Creator window and modify the build and run configurations as follows:

                                Build settings

                                Build directory:
                                    ~/src/MuseScore (or wherever the code is located)
                                
                                Build steps:
                                    make revision
                                    make installdebug PREFIX=install SUFFIX=-qt LABEL="Qt Creator Build" UPDATE_CACHE=FALSE
                                
                                Clean steps:
                                    make uninstalldebug
                                    make clean
                                
                                Build environment:
                                    Use System Environment
                                

                                Run settings

                                Executable: build.debug/install/bin/mscore-qt  (this file won't exist until you run the build for the first time)
                                Working directory: %{buildDir}
                                

                                Using the Makefile means that you always use the same build configuration as Travis. If the CMake options are changed by a PR then your configuration is updated automatically when you fetch and merge the changes from upstream.

                                Eclipse CDT

                                1. Download Eclipse CDT bundle or install the CDT on a previous eclipse install.
                                2. Edit ./CMakeLists.txt and change Project name to something different than "mscore" (if not, Eclipse will not find the mscore binary to run)
                                3. Create a musescore_build directory in the workspace and run Cmake to generate Eclipse project
                                  mkdir musescore_build
                                  cd musescore_build
                                  cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../MuseScore
                                4. Open Eclipse.
                                  • Import project using Menu File → Import
                                  • Select General → Existing projects into workspace
                                  • Browse where your build tree is and select the root build tree directory. Keep "Copy projects into workspace" unchecked.
                                  • You get a fully functional eclipse project. Be patient, Eclipse will index all cpp files and build the project.
                                5. To debug, right click on the project and choose Debug as → Local C/C++ Application
                                6. Go to debugger tab, share libraries tab and uncheck Load shared library symbols automatically and Stop on shared library events
                                7. You should be able to debug.
                                8. If you lack sound, in Preferences → I/O, you can try to check PortAudio, APi: Alsa, Device: Pulse
                                9. More information: http://www.cmake.org/Wiki/Eclipse_CDT4_Generator

                                Compile instructions (Ubuntu 12.04) - Git

                                This page contains only the compilation instructions that are specific to Ubuntu 12.04 LTS.

                                Tested working on: Ubuntu 12.04 LTS Desktop and Server editions.

                                Install dependencies

                                Install GCC 4.8+

                                GCC 4.8 or higher is needed. On Ubuntu 12.10 and higher, it's the default compiler. On Ubuntu 12.04, you will need to install it.

                                sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
                                sudo apt-get  update
                                sudo apt-get install g++-4.8
                                sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
                                

                                Install Qt 5.3.2

                                Download and install Qt 5.3 from http://qt-project.org/downloads
                                Add Qt bin directory in your $PATH.

                                For 32-bit:

                                echo "PATH=~/Qt5.3.2/5.3.2/gcc/bin:$PATH" >> ~/.bashrc
                                source  ~/.bashrc
                                

                                or for 64-bit:

                                echo "PATH=~/Qt5.3.2/5.3.2/gcc_64/bin:$PATH" >> ~/.bashrc
                                source  ~/.bashrc
                                

                                Install remaining dependencies

                                sudo apt-get install git cmake
                                sudo apt-get install alsa libsndfile1 
                                sudo apt-get install libasound2-dev portaudio19-dev libsndfile1-dev zlib1g-dev libfreetype6-dev
                                sudo apt-get install lame libmp3lame-dev
                                sudo apt-get install libssl-dev
                                

                                In Ubuntu 13.04 you need to install these additional libraries:

                                sudo apt-get install libdrm-dev libgl1-mesa-dev

                                Note: In some cases, libgl1-mesa-dev(and/or libegl1-mesa-dev) needs to be installed in Ubuntu 12.04 desktop edition too. Install this library if you get the following error while making:

                                Failed to find "GL" in "".

                                Optional

                                sudo apt-get install libpulse-dev
                                sudo apt-get install doxygen
                                

                                Get the source code and compile

                                Now follow the generic instructions for compiling on Linux.

                                Compile instructions (Ubuntu 9.10) - SVN trunk

                                This page is deprecated and kept for reference. The current development of MuseScore is done on Git and the SVN repo is abandoned. You can find instructions to build the most up to date version in the developer handbook

                                The following steps explains how to build and install MuseScore trunk on Ubuntu 9.10 Karmic Koala.
                                These instructions have been tested on a clean Ubuntu server distrib.

                                Qt 4.7 PPA: deb http://ppa.launchpad.net/kubuntu-ppa/backports/ubuntu lucid main

                                Setup build environment

                                1. Update your repository sources.
                                  sudo apt-get update
                                2. Install Subversion
                                  sudo apt-get install subversion
                                3. Get MuseScore last source code
                                  mkdir musescore
                                  cd musescore
                                  svn co https://mscore.svn.sourceforge.net/svnroot/mscore/trunk .
                                  cd ..
                                4. Get Qt 4.6. This is only necessary if you are running Ubuntu Karmic without any mscore PPA. Otherwise, skip the next (four) steps until "Install MuseScore dependencies" below.
                                  If you are running a 32-bit OS
                                  wget http://get.qt.nokia.com/qtsdk/qt-sdk-linux-x86-opensource-2010.05.1.bin
                                  chmod a+x qt-sdk-linux-x86-opensource-2010.05.1.bin

                                  If you are running a 64-bit OS
                                  wget http://get.qt.nokia.com/qtsdk/qt-sdk-linux-x86_64-opensource-2010.05.1.bin
                                  chmod a+x qt-sdk-linux-x86_64-opensource-2010.05.1.bin
                                5. Install Qt4.6. User home is fine. Install everything
                                  If you are running a 32-bit OS
                                  ./qt-sdk-linux-x86-opensource-2010.05.1.bin
                                  If you are running a 64-bit OS
                                  ./qt-sdk-linux-x86_64-opensource-2010.05.1.bin
                                6. Put qmake in the $PATH
                                  Append the following to ~/.bashrc
                                  if [ -d ~/qtsdk-2010.05/qt/bin ] ; then
                                  PATH=~/qtsdk-2010.05/qt/bin:"${PATH}"
                                  fi

                                  Then run
                                  source .bashrc
                                7. As written at the end of Qt installation process, install Qt dependencies
                                  sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev

                                Install MuseScore dependencies

                                sudo apt-get build-dep musescore

                                If this magic command doesn't work, try to install the following dependencies manually:

                                1. ALSA
                                  sudo apt-get install alsa
                                  sudo apt-get install libasound2-dev
                                2. Libsndfile for flac, ogg, wav export
                                  sudo apt-get install libsndfile1
                                  sudo apt-get install libsndfile1-dev
                                3. Portaudio (optional)
                                  sudo apt-get install portaudio19-dev

                                Build

                                Type the following to compile and install MuseScore. It will take quite some time to compile. On a 1.7Ghz CPU, it takes more than an hour.
                                cd musescore
                                make revision
                                make release
                                sudo make install

                                Further upgrades

                                Are easier... Use the update subcommand of svn and don't forget make revision to have the right revision number in the about box.
                                If the build environment didn't change (Qt version etc...), type the following

                                svn update
                                make revision
                                sudo make install

                                If you want to build from scratch :
                                cd musescore
                                svn update
                                make clean
                                make revision
                                make release
                                sudo make install

                                Debug with Eclipse CDT

                                1. Download Eclipse CDT bundle or install the CDT on a previous eclipse install.
                                2. Check out MuseScore code from SVN in Eclipse into a directory named "musescore". You'll need a source tree linked to SVN in your workspace to get updates.
                                3. Edit mscore/CMakeLists.txt and change Project name to something different than "mscore" (if not, eclipse will not find the mscore binary to run)
                                4. Create a musescore_build directory in the workspace and run Cmake to generate Eclipse project
                                  mkdir musescore_build
                                  cd musescore_build
                                  cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../musescore
                                5. Open Eclipse.
                                  • Import project using Menu File->Import
                                  • Select General->Existing projects into workspace
                                  • Browse where your build tree is and select the root build tree directory. Keep "Copy projects into workspace" unchecked.
                                  • You get a fully functional eclipse project. Be patient, Eclipse will index all cpp files and build the project.
                                6. To debug, right click on the project and choose Debug as -> Local C/C++ Application
                                7. Go to debugger tab, share libraries tab and uncheck Load shared library symbols automatically and Stop on shared library events
                                8. You should be able to debug.
                                9. If you lack sound, in Preferences->I/O, you can try to check PortAudio, APi: Alsa, Device: Pulse

                                More information: http://www.cmake.org/Wiki/Eclipse_CDT4_Generator

                                Qt Creator IDE

                                • open mscore/CMakeLists.txt as your project file.
                                • when QT Creator asks for command line options for cmake, use
                                  -G"Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../mscore

                                Compileer instructies (Ubuntu)

                                Hier zijn de vereiste stappen voor het compileren van 0.9.3 op Ubuntu 8.04 Hardy:

                                Installeer eerst de vereiste afhankelijkheden (als u die reeds hebt)

                                sudo apt-get build-dep mscore

                                Download de .tar.bz source from Sourceforge, uncompress, compileer en install :

                                bunzip2 mscore-0.9.3.tar.bz2
                                tar xf mscore-0.9.3.tar
                                cd mscore-0.9.3

                                [De "make revision" stap hieronder is optioneel, Het revisienummer kunt u vinden in het scherm >>>Help>>> Over Musescore]

                                make revision
                                make

                                [ga een kopje koffie drinken tot hij klaar is...]

                                sudo make install

                                Compile instructions (Ubuntu) - Git

                                This page contains only the compilation instructions that are specific to Ubuntu and related Debian-based distributions.

                                Tested working on: Ubuntu 16.04 LTS, 18.04 LTS, and 20.04 LTS

                                It should also work with the various Ubuntu flavours, including Ubuntu MATE, Ubuntu Studio, Kubuntu and Xubuntu, etc.
                                It should work on derivatives such as Linux Mint, and it may also work on the corresponding Debian and Debian-derived distributions like Raspian.

                                Install dependencies

                                Recent distributions have up-to-date versions of most of the necessary packages in the default repositories.

                                sudo apt-get install git cmake g++
                                sudo apt-get install libasound2-dev portaudio19-dev libmp3lame-dev libsndfile1-dev libportmidi-dev
                                sudo apt-get install libssl-dev libpulse-dev libfreetype6-dev libfreetype6
                                

                                If you get an error message like this while compiling:

                                Failed to find "GL" in "".
                                

                                Then try installing these additional libraries:

                                sudo apt-get install libdrm-dev libgl1-mesa-dev libegl1-mesa-dev
                                

                                Important Note: It is as of November 2020 necessary to install Qt 5.15, or later to compile the master branch. 5.9 or later is necessary for 3.x with plugins.

                                MuseScore uses Qt to achieve a consistent look and feel across different platforms (Mac, Windows & Linux). Qt is updated more frequently than any other dependency. Having an out-of-date version of Qt is the most common cause of problems as far reaching as strange window behavior, keyboard shortcuts not working, or the code failing to compile outright.

                                If your repository has Qt version 5.15 (or 5.9 for 3.x), or later, you can get Qt from your repository:

                                sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools qtwebengine5-dev \
                                qtscript5-dev libqt5xmlpatterns5-dev libqt5svg5-dev libqt5webkit5-dev \
                                qtbase5-private-dev libqt5x11extras5-dev qtdeclarative5-dev qtquickcontrols2-5-dev
                                

                                Might need these too:

                                sudo apt-get install qml-module-qtquick-controls2 qml-module-qtquick-window2 qml-module-qtquick2 qml-module-qtgraphicaleffects qml-module-qtqml-models2 libqt5quicktemplates2-dev qtquickcontrols2-5-dev libqt5x11extras5 libqt5x11extras5-dev libqt5networkauth5 libqt5networkauth5-dev qtbase5-private-dev
                                

                                If musescore compiles but you get a warning message while compiling about QuickTemplates2, you may get an empty Palette in Musescore. If so, check to see if "/usr/lib/x86_64-linux-gnu/cmake/Qt5QuickTemplates2" exists. If not, try copying:
                                /usr/lib/x86_64-linux-gnu/cmake/Qt5QuickControls2/Qt5QuickControls2Config.cmake
                                /usr/lib/x86_64-linux-gnu/cmake/Qt5QuickControls2/Qt5QuickControls2ConfigVersion.cmake
                                to
                                /usr/lib/x86_64-linux-gnu/cmake/Qt5QuickTemplates2/Qt5QuickTemplates2Config.cmake
                                /usr/lib/x86_64-linux-gnu/cmake/Qt5QuickTemplates2/Qt5QuickTemplates2ConfigVersion.cmake

                                And replace all mentions of "QuickControls2" with "QuickTemplates2".

                                If your repository does not have 5.15 (5.9), or later then follow these steps to install it:
                                (Note that having two different versions of Qt installed can cause difficulties. If you installed using "apt-get install" above, then you may want to remove that before following these steps.)

                                1. Download the latest version of Qt (5.15 as of November 2020) from https://www.qt.io/download-open-source. The file you download is actually an installation script called something like "qt-unified-linux-x64-2.0.3-online.run". (It will be called something different for 32-bit machines).
                                2. Move the installer (file you downloaded) to your Home directory and open a terminal window (Ctrl+Alt+T on Ubuntu).
                                3. Give the installer execute permissions:
                                  sudo chmod +x qt-unified-linux-x64-2.0.3-online.run
                                4. Run the installer ("sudo" is not required if you choose to install to your Home directory in Step 5):
                                  sudo ./qt-unified-linux-x64-2.0.3-online.run
                                5. Choose the "Custom installation" option and make sure "Qt WebEngine" is included in the list of packages at Qt > Qt 5.15.x. Write down the installation directory (default: "/opt/Qt". You can choose somewhere else if you want but make sure it doesn't have spaces anywhere in the path). Finish the install.
                                6. In your file browser, navigate to the installation directory and find the path to the Qt "bin" directory. (Mine is "/opt/Qt/5.8/gcc_64/bin". This will be different on different machines.)
                                7. Add the "bin" directory to your $PATH environment variable so that MuseScore knows where it is. (Modify the following command with the correct path as appropriate.):
                                  echo 'export PATH=/opt/Qt/5.8/gcc_64/bin:$PATH' &gt;&gt; ~/.bashrc
                                8. Load your new $PATH variable.
                                  source ~/.bashrc

                                You can check the Qt installation and version by typing "qmake -version" in a terminal.

                                If you experience any problems with MuseScore, first check you have the latest copy of the MuseScore source code, and then check you have the latest copy of Qt. Only once you have confirmed this (and done the same for the other dependencies) should you consider creating a bug report in the issue tracker.

                                Compiling the code

                                Now follow the Compile instructions (Linux & BSD) - Git.

                                The remaining steps on this page are optional. Read them if you experience problems or wish to completely uninstall MuseScore and it's dependencies.

                                Uninstall dependencies

                                Remember all the packages installed previously in order to compile MuseScore? Actually, even more were installed because each installed package has its own dependencies. If you don't want them anymore, here's how to remove them.

                                When you proceed with the installation, apt-get outputs in the terminal the complete list of packages that are to be installed. If you copy this list, the packages can be easily removed later with this command:

                                sudo apt-get remove --purge LIST
                                

                                If you did not copy this output and still want to remove all the packages, it's a little more complicated but still feasible. For each command entered, for example:

                                sudo apt-get install git cmake g++
                                

                                an entry is added in the following log file: /var/log/apt/history.log. Open it with a text editor and find the relevant entry. Example:

                                Start-Date: START DATE OF INSTALLATION
                                Commandline: apt-get install git cmake g++
                                Install: libstdc++-4.9-dev:amd64 (4.9.1-15ubuntu1, automatic), libc-dev-bin:amd64 (2.19-10ubuntu1, automatic), g++:amd64 (4.9.1-4ubuntu2), g++-4.9:amd64 (4.9.1-15ubuntu1, automatic), liberror-perl:amd64 (0.17-1.1, automatic), git-man:amd64 (2.1.0-1, automatic), git:amd64 (2.1.0-1), cmake:amd64 (2.8.12.2-0ubuntu5), cmake-data:amd64 (2.8.12.2-0ubuntu5, automatic), linux-libc-dev:amd64 (3.16.0-16.22, automatic), libc6-dev:amd64 (2.19-10ubuntu1, automatic)
                                Upgrade: MAY BE THERE BUT IT'S NOT RELEVANT
                                End-Date: END DATE OF INSTALLATION

                                Text that must be copied follows the key Install:

                                libstdc++-4.9-dev:amd64 (4.9.1-15ubuntu1, automatic), libc-dev-bin:amd64 (2.19-10ubuntu1, automatic), g++:amd64 (4.9.1-4ubuntu2), g++-4.9:amd64 (4.9.1-15ubuntu1, automatic), liberror-perl:amd64 (0.17-1.1, automatic), git-man:amd64 (2.1.0-1, automatic), git:amd64 (2.1.0-1), cmake:amd64 (2.8.12.2-0ubuntu5), cmake-data:amd64 (2.8.12.2-0ubuntu5, automatic), linux-libc-dev:amd64 (3.16.0-16.22, automatic), libc6-dev:amd64 (2.19-10ubuntu1, automatic)
                                

                                To remove these packages:

                                sudo apt-get remove --purge $(echo "TEXT COPIED ABOVE" | sed -r 's/\s\([^\)]+\),?//g')
                                

                                IMPORTANT: by doing so, you may remove some Qt packages needed to run MuseScore. The following command should ensure that you have all that is required:

                                sudo apt-get install libqt5core5a libqt5gui5 libqt5network5 libqt5xml5 libqt5xmlpatterns5 \
                                libqt5svg5 libqt5printsupport5 libqt5webkit5
                                

                                Note about lrelease

                                When we invoke make, a call to the executable lrelease is done during the process. However, it's not the command /usr/bin/lrelease from the package qtchooser but the one from qttools5-dev-tools. That's why the package qttools5-dev-tools is added in the list of dependencies to install. If it was not installed, the following error would occur during the make invocation:

                                make[4]: Entering directory '/path/to/MuseScore/build.release'
                                /bin/sh: 1: /usr/lib/x86_64-linux-gnu/qt5/bin/lrelease: not found
                                CMakeFiles/lrelease.dir/build.make:49: recipe for target 'CMakeFiles/lrelease' failed
                                make[4]: *** [CMakeFiles/lrelease] Error 127
                                make[4]: Leaving directory '/path/to/MuseScore/build.release'
                                

                                and the following during the make install invocation:

                                CMake Error at share/locale/cmake_install.cmake:36 (FILE):
                                  file INSTALL cannot find
                                  "/path/to/MuseScore/share/locale/mscore_af.qm".
                                Call Stack (most recent call first):
                                  share/cmake_install.cmake:43 (INCLUDE)
                                  cmake_install.cmake:45 (INCLUDE)
                                
                                
                                Makefile:62: recipe for target 'install' failed
                                make[1]: *** [install] Error 1
                                make[1]: Leaving directory '/path/to/MuseScore/build.release'
                                Makefile:92: recipe for target 'install' failed
                                make: *** [install] Error 2
                                

                                Compile instructions (openSUSE Leap and openSUSE Tumbleweed) - Git

                                This page contains only the compilation instructions that are specific to openSUSE distributions.

                                Install the tools required for building MuseScore:


                                sudo zypper install -y git gcc7 gcc-c++ make cmake

                                Install the dependencies required by building MuseScore:


                                sudo zypper install -y alsa-devel libpulse-devel libjack-devel portaudio-devel libQt5Core-devel \
                                libQt5Gui-devel libQt5Network-devel libQt5Test-devel libQt5QuickControls2-devel \
                                libQt5Xml-devel libqt5-qtsvg-devel libQt5Sql-devel libQt5Widgets-devel \
                                libQt5PrintSupport-devel libQt5Concurrent-devel libQt5OpenGL-devel libqt5-linguist-devel \
                                libQt5Help5 libqt5-qttools-devel libqt5-qtwebengine-devel libmp3lame-devel \
                                libsndfile-devel portmidi-devel libvorbis-devel

                                Remark regarding qmake

                                On openSUSE, the tool qmake is refering to the Qt4 version of this tool. However, since MuseScore is using Qt5, the tool qmake-qt5 should be used!
                                This can be done by editing the file build/FindQt5.cmake and change line 38
                                find_program(QT_QMAKE_EXECUTABLE qmake)
                                into
                                find_program(QT_QMAKE_EXECUTABLE qmake-qt5)

                                An alternative is to create a script qmake in you path with the contents:

                                #!/bin/bash --noprofile
                                exec qmake-qt5 ${*}

                                Compiling the code

                                Now follow the generic instructions for compiling on Linux.

                                Tested on

                                These instructions are tested on
                                * openSUSE 15.1
                                * openSUSE Tumbleweed as per September 9th, 2019

                                Note on openSUSE Tumbleweed

                                Please note openSUSE Tumbleweed is a rolling release with the most recent release of the used packages. At this moment (September 12th, 2019) the installed version of Qt5 is Qt5 5.13.1. This version causes several compile warnings but the resulting executable runs.
                                To use the recommended version of Qt5, installed the required Qt packages from another source, e.g. the openSUSE download site.

                                Compile instructions (Fedora) - Git

                                This page contains only the compilation instructions that are specific to Fedora and related RPM-based distributions.

                                Tested working on: Fedora 21 and 22

                                Install dependencies:

                                # Note: Use "yum" instead of "dnf" on older systems.
                                sudo dnf install -y gcc gcc-c++ qt-devel pulseaudio-libs-devel alsa-lib-devel jack-audio-connection-kit-devel qt5-qtbase-devel qt5-qttools-libs-designercomponents qt5-qttools-devel portaudio-devel poppler-qt5-devel qt5-qtdeclarative-devel qt5-qtscript-devel qtermwidget-qt5-devel qt5-qtwebkit-devel qt5-qtxmlpatterns-devel qt5-qtquick1-devel qt5-qtsvg-devel qt5-qttools-devel qt5-qttools-static lame-devel libsndfile-devel freetype-devel texlive-scheme-basic qt5-qtwebengine qt5-qtwebengine-devel libvorbis-devel
                                

                                Tested working on Fedora 28 :

                                sudo dnf install -y gcc gcc-c++ qt-devel pulseaudio-libs-devel alsa-lib-devel jack-audio-connection-kit-devel qt5-qtbase-devel qt5-qttools-libs-designercomponents qt5-qttools-devel portaudio-devel poppler-qt5-devel qt5-qtdeclarative-devel qt5-qtscript-devel qtermwidget-qt5-devel qt5-qtwebkit-devel qt5-qtxmlpatterns-devel qt5-qtsvg-devel qt5-qttools-devel qt5-qttools-static lame-devel libsndfile-devel freetype-devel texlive-scheme-basic qt5-qtwebengine qt5-qtwebengine-devel libvorbis-devel portmidi-devel qt5-qtnetworkauth qt5-qtnetworkauth-devel qt5-qtquickcontrols2 qt5-qtquickcontrols2-devel qt5-qtx11extras qt5-qtx11extras-devel qt5-qtbase-private-devel
                                

                                Now follow the generic instructions for compiling on Linux.

                                Compile instructions (Fedora 20) - Git

                                Fedora 20 is deprecated and this page kept for reference only. You can find instructions to build the most up to date version in the developer handbook

                                Add the rpmfusion.org nonfree repository to yum, then:

                                sudo yum install qt5-qtwebkit-devel.x86_64 qt5-qtxmlpatterns-devel.x86_64 qt5-qtsvg-devel.x86_64 alsa-lib-devel.x86_64 jack-audio-connection-kit-devel.x86_64 portaudio-devel.x86_64 pulseaudio-libs-devel.x86_64 libsndfile-devel.x86_64 libvorbis-devel.x86_64 qt5-qttools-devel.x86_64 cmake.x86_64 cmake-gui lame-devel.x86_64

                                Or build lame from source and remove lame-devel from the yum install.

                                Change to the extracted or git cloned source directory, then:

                                1. Run cmake
                                  I use cmake-gui to configure and generate, but cmake command line works also, if you're familiar with it.
                                2. ./configure
                                3. make release
                                4. sudo make install

                                Compile instructions (Archlinux-based Distros) - Git

                                Run:

                                sudo pacman -S --needed alsa-lib freetype2 libpulse libsndfile libvorbisfile.so portaudio portmidi qt5-base qt5-declarative qt5-quickcontrols qt5-quickcontrols2 qt5-graphicaleffects qt5-networkauth qt5-svg qt5-tools qt5-webengine qt5-xmlpatterns zlib lame cmake doxygen git qt5-script texlive-core make gcc jack pkgconfig
                                

                                By now, you have the packages you need. You'll be able to continue for Linux/BSD compiling process at Compile instructions (Linux and BSD) - Git

                                (Tested on Manjaro Linux 21.1.3 (x86_64), with kernel labeled as "5.13.15-1-MANJARO". September 19, 2021)

                                Compile instructions (MU4 macOS with QtCreator) - Git

                                  Use these instructions to compile MuseScore master branch with QtCreator and Qt 5.15 (the minimum supported Qt version) on macOS 10.13+.
                                  See the Versions Reference page for which macOS versions are supported by Qt 5.15.

                                  Setting up the development environment

                                  1. Install Xcode developer tools

                                    • If you have XCode: Preferences -> Download and install the Command line Tools.
                                    • else run in the terminal: xcode-select --install
                                  2. Download and install Qt for open source with Qt online installer
                                    Select at least two modules: macOS and QtWebEngine
                                    installQt.png

                                  3. Install the dependencies. If you are new to macOS development or do not have a preference, we suggest Homebrew,

                                    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
                                    $ brew install libogg libsndfile libvorbis pkg-config portaudio jack lame cmake git
                                     

                                    If you prefer MacPorts, choose the DMG of your OS and install MacPorts.
                                    Open a terminal and enter the following (in your home):
                                    $ sudo port install git libsndfile pkgconfig lame portaudio jack cmake

                                  Setting up the project

                                  1. Clone the project from GitHub
                                    git clone <your_fork_url>

                                  2. Open the QtCreator and select File -> Open File or Project then choose file CMakeLists.txt

                                  3. Configure project

                                    • create the directories in project: build.debug for debug, build.release for release etc
                                    • choose appropriate paths in the settings configureProject.png
                                  4. switch to Projects mode and change CMake configuration:

                                    • uncheck option BUILD_PCH
                                    • check option BUILD_UI_MU4
                                    • create directory install in the current build folder ( for the debug: build.debug/install )
                                    • choose created directory in the option: CMAKE_INSTALL_PREFIX
                                    • Push the button Apply Configuration Changes CMakeSettings.png
                                  5. Run CMake

                                  6. Build the project

                                  Compile instructions (macOS) - Git

                                    Use these instructions to compile MuseScore master branch with Xcode and Qt 5.12 on macOS 10.12+. See the Versions Reference page for which macOS versions are supported by Qt 5.12.
                                    As of 484f8dc, 09Oct2020, Qt 5.15 (and a C++17 capable toolchain) is required for the master branch. This excludes macOS 10.12 (and lower). The 3.x branch will stay in Qt 5.9 though.

                                    Setting the build and development environment

                                    1. Install the latest version of Xcode from the Mac App Store.

                                    2. Launch Xcode and accept the licence.

                                    3. In Xcode, go to Preferences -> Download and install the Command line Tools. With Xcode 5, you might need to run xcode-select --install instead.

                                    4. Install the dependencies. If you are new to macOS development or do not have a preference, we suggest Homebrew,

                                          $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
                                          $ brew install libogg libsndfile libvorbis pkg-config portaudio jack lame cmake git uncrustify

                                    If you prefer MacPorts, choose the DMG of your OS and install MacPorts.
                                    Open a terminal and enter the following (in your home):
                                    $ sudo port install git libsndfile pkgconfig lame portaudio jack cmake qt513

                                    1. Install Qt. It's possible to do this via Homebrew or MacPorts, but the recommened way is to use the Qt Online Installer (open source version, not commercial), which is available from the link at the bottom of this page. Open the DMG and double-click the installer (no need to drag to your Applications folder). You'll have to sign-in / create a Qt account and agree to terms (probably as "an individual not working for any company" unless a company is paying you to work on MuseScore). When asked, do a Custom Installation. Under Qt 5.15.2 (i.e. the latest non-Qt 6 version), make sure the components labelled macOS and Qt WebEngine are selected. Also, at the bottom of the window, under Developer and Designer Tools, make sure that CMake and Ninja are selected.

                                    2. Add Qt's binary folder to your PATH environment variable. To do this, open the hidden text file ~/.bash_profile (if that file exists), or alternatively use ~/.profile. If neither file exists then create ~/.profile. Append the following line to the file you just opened:

                                        export PATH="${PATH}:${HOME}/Qt/<QT_VERSION>/clang_64/bin"

                                    Make sure you substitute <QT_VERSION> for the actual version you installed. E.g. for Qt 5.15.2:

                                        export PATH="${PATH}:${HOME}/Qt/5.15.2/clang_64/bin"

                                    You must update the version number in this file every time you update Qt itself via the MaintainanceTool.

                                    1. Clone the repository from GitHub into your home directory:
                                          $ cd ~
                                          $ git clone git://github.com/musescore/MuseScore.git
                                     

                                    If you plan to contribute to MuseScore, you can setup your own fork on GitHub and clone it instead. See the Git Workflow page.

                                    Building MuseScore

                                    1. In a terminal, enter:
                                      $ cd MuseScore
                                    2. Set the revision SHA1 for this build
                                      $ make -f Makefile.osx revision
                                    3. Start the actual compilation. It takes more than one hour on a MacBook 2 GHz but it's pretty fast on a MacBook Pro Core i7 (4 to 5 minutes max).
                                      $ make -f Makefile.osx release
                                    4. Call the install target. The bundle is copied from the Release directory into the applebuild directory. All resources (such as help and templates) are added to it
                                      $ make -f Makefile.osx install
                                    5. The package step. This target calls a script derived from this one. It creates a self-contained bundle, thanks to macdeployqt, by adding and stripping the Qt libraries into the MuseScore bundle. It also adds Qt plugins, PortAudio and libsndfile. A DMG file is the result
                                      $ make -f Makefile.osx package

                                    Debugging and developing MuseScore

                                    If you are a developer, look at the xcode target in the makefile. It generates a xcodeproj file. You can open this xcodeproj file and use the Apple IDE for tasks such as modifying, debugging and compiling MuseScore code.

                                    Run
                                    $ make -f Makefile.osx xcode

                                    Then open the xcodeproj bundle in Xcode
                                    $ open build.xcode/mscore.xcodeproj

                                    In Xcode, run the ALL_BUILD scheme. It will compile all the files. Then run the install scheme. It will install the required files (fonts, images etc...) for runtime. Debug by running the mscore scheme.

                                    If MuseScore won't start

                                    You may get this error message on the Xcode Console when you try to run the mscore scheme:


                                    This application failed to start because it could not find or load the Qt platform plugin "cocoa".

                                    This mean MuseScore can't find the Qt plugins. You need to edit the mscore scheme to set the environment variable QT_PLUGIN_PATH to point to your Qt plugins directory. The default value for Qt 5.12 is:

                                          QT_PLUGIN_PATH=~/Qt/5.12.9/clang_64/plugins

                                    The actual value you need to set depends on your Qt version (which you can find with qmake -v) and where you installed it earlier on. You may also need to expand the tilde (~) to it's full value /Users/<username> to point to your home directory.

                                    If MuseScore doesn't start for any other reason then try reverting to factory settings, but make sure you revert the compiled mscore debug build rather than the official version if you have it installed.

                                    Debugging in Xcode 5+

                                    In Xcode 5+, you might need to uncheck “Allow debugging when using document Versions Browser” in Product-->Edit Scheme .. -->Run mscore.app. Otherwise --NSDocumentRevisionsDebugMode YES gets passed to MuseScore, and it doesn't know how to handle it.

                                    In Xcode > 5, you'll find the menu item elsewhere. Product-->Scheme->Edit Scheme..
                                    Select Run (on the left hand side), and select Options along the top of the form.
                                    Then you'll find "Allow debugging when using document Versions Browser" in the form. Uncheck the checkbox.

                                    Contributing

                                    The preferred way to contribute is via a Pull Request on GitHub. Patches are also welcome on the Developer Mailing List, or on the Issue Tracker.

                                    Building a release for distribution

                                    # may no longer be relevant as this is for 10.7. Please review and remove this comment or the paragraph
                                    Dependencies built with Homebrew will not run on older versions of macOS. Here is a zip file with the dependencies as "bottles" built on Mac OS X 10.7. They can be installed with
                                    brew install {file}.tar.¹

                                    Compile instructions (Mac OS X 10.5) - SVN trunk

                                    Here are the steps to create an universal binary from MuseScore SVN trunk.
                                    Please note that some steps might not be required but I document them because it works on my system by following them.
                                    These instructions have been tested on Mac Intel with Mac OS X 10.5.8.

                                    Overview

                                    The whole build process takes 1 hour and 30 minutes on a Macbook 2GHz. Downloading and installing all the tools and dependencies can take one hour more but it's just a one time process.
                                    The result of the build process is a DMG file ready to be distribute and suitable for PPC and Intel on Mac OS X Tiger and Leopard.

                                    Setup the build and development environment

                                    1. Install the Developer Tools from Apple. They are included with OS media. Developer Tools includes a command line svn client and Xcode, the Apple IDE. The last version for 10.5 is Xcode 3.1.4 Developer Tools.
                                    2. Open a terminal and in your home
                                      mkdir musescore
                                      cd musescore
                                      svn co https://mscore.svn.sourceforge.net/svnroot/mscore/trunk mscore 
                                      
                                    3. Install Cmake 2.8.2. The dmg installation is ok.
                                    4. Install Qt SDK 4.6 from the dmg file. Choose the SDK not the Framework only download.
                                    5. Install macports 1.9.1. Dmg is fine as well.
                                    6. Configure macports to install 10.4 compliant ports by changing these lines in /opt/local/etc/macports/macports.conf
                                      universal_target  10.4
                                      universal_sysroot      /Developer/SDKs/MacOSX10.4u.sdk
                                      
                                    7. In a terminal, install portaudio and libsndfile with macport. Pkgconfig is also required to help cmake finding these libs.
                                      Note the +universal for libsndfile to generate universal binaries. It's default for portaudio apparently.
                                      sudo port install pkgconfig
                                      sudo port install portaudio
                                      sudo port install libsndfile +universal
                                      sudo port install lame
                                      
                                    8. Install JackOSX and copy the pkgconfig file to the good place.
                                      sudo cp /usr/local/lib/pkgconfig/jack.pc /opt/local/lib/pkgconfig/
                                      

                                    Build MuseScore

                                    1. In a terminal, go into mscore directory
                                      cd ~/musescore/mscore
                                    2. Set the revision number for this build.
                                      make revision
                                    3. Start the actual compilation. It takes more than 1 hour on macbook 2Ghz
                                      make -f MakeFile.osx release

                                      if you are a developer, take a look to the release target in the makefile. You'll see that it generates a xcodeproj file and calls xcodebuilder to build it as a command line. Of course, you can open this xcodeproj file and enjoy the Apple IDE to modify MuseScore code, correct bugs, compile, debug etc... Patches are welcome on the dev mailing list.

                                    4. Call the install target. The bundle is copied from Release directory into applebuild directory. All resources (help, templates etc...) are added to it.
                                      make -f MakeFile.osx install
                                    5. Package step. This target calls a script derived from this one. It creates a self contained bundle thanks to macdeployqt by adding and stripping the Qt libraries into the MuseScore bundle. It also adds Qt plugins, portaudio and libsndfile. A dmg file is created with a nice background and well positioned icons.
                                      make -f MakeFile.osx package

                                    Happy building!

                                    Compile instructions (macOS 10.10+) - Git

                                      Use these instructions to compile MuseScore master branch on MacOS 10.10+ (see http://doc.qt.io/qt-5/supported-platforms.html).

                                      For macOS 10.12+, please go to Compile Instructions for Xcode and Qt 5.12 on macOS 10.12+.

                                      From revision 5b7c72a onwards, committed 9 March 2017, the development version of MuseScore (master) requires Qt 5.9 or newer and a C++11 capable toolchain.
                                      As of 484f8dc, 09Oct2020, Qt 5.15 (and a C++17 capable toolchain) is required for the master branch, this does exclude macOS 10.10, 10.11 and 10.12.
                                      the 3.x branch though stays on Qt 5.9, see above.

                                      The 2.x branches require Qt 5.4 however.

                                      Although MuseScore 3.x can be built with Qt 5.12, and is, on other platforms, it is currently (November 2019) a business requirement that it support MacOS 10.10 and 10.11 (which were still called OS X at that time). Qt 5.12 does not support these earlier releases, and, thus, MuseScore 3.x for MacOS is released with Qt 5.9; therefore, you should build and test with that Qt release as long as this business requirement persists. Code intentionally or unintentionally depending on Qt features and even fixes since 5.9 will not work in the release.

                                      Setting the build and development environment

                                      1. Install the latest version of Xcode from the Mac App Store.
                                      2. Launch Xcode and accept the licence
                                      3. In Xcode, go to Preferences -> Download and install the Command line Tools. With Xcode 5, you might need to run xcode-select --install instead.
                                      4. Install the dependencies. If you are new to macOS development or do not have a preference, we suggest Homebrew
                                        $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
                                        $ brew install libogg libsndfile libvorbis pkg-config portaudio jack lame cmake git
                                      5. If you prefer MacPorts, choose the DMG of your OS and install MacPorts
                                        Open a terminal and enter the following (in your home):
                                        $ sudo port install git libsndfile pkgconfig lame portaudio jack cmake
                                      6. Qt is normally shipped via an online installer, which you should use if you are running the current version of macOS. Download the open source version of Qt (not the commercial version), open the DMG and run the online installer. It will offer Qt 5.12. To get Qt 5.9, uncheck Latest releases, check LTS and press Refresh. By default it will install Qt in your home directory. If you want to build a 2.x version of MuseScore, you also need to make sure to check Qt 5.4.2 for installation. To build MuseScore 2.x on older macOS versions, you should also install Qt 5.4.2 directly via the same online installer.
                                        Note: if you are using MacOS Catalina (10.15) to debug MuseScore, Qt 5.9 is known to have issues, so you should use Qt 5.12 instead
                                      7. Append the following line to ~/.profile (or alternatively ~/.bash_profile if you already have it)
                                        export PATH=$PATH:~/Qt/5.9.8/clang_64/bin
                                        and run source ~/.profile
                                      8. Clone the repository from GitHub:
                                        git clone git://github.com/musescore/MuseScore.git

                                        If you plan to contribute to MuseScore, you can setup your own fork on GitHub and clone it instead. See the Git Workflow page.

                                      Building MuseScore

                                      1. In a terminal, enter:
                                        cd MuseScore
                                      2. Set the revision SHA1 for this build
                                        make -f Makefile.osx revision
                                      3. Start the actual compilation. It takes more than one hour on a MacBook 2 GHz but it's pretty fast on a MacBook Pro Core i7 (4 to 5 minutes max).
                                        make -f Makefile.osx release
                                      4. Call the install target. The bundle is copied from the Release directory into the applebuild directory. All resources (such as help and templates) are added to it
                                        make -f Makefile.osx install
                                      5. The package step. This target calls a script derived from this one. It creates a self-contained bundle, thanks to macdeployqt, by adding and stripping the Qt libraries into the MuseScore bundle. It also adds Qt plugins, PortAudio and libsndfile. A DMG file is the result
                                        make -f Makefile.osx package

                                      Debugging and developing MuseScore

                                      If you are a developer, look at the xcode target in the makefile. It generates a xcodeproj file. You can open this xcodeproj file and use the Apple IDE for tasks such as modifying, debugging and compiling MuseScore code.

                                      Run
                                      make -f Makefile.osx xcode

                                      Then open the xcodeproj bundle in Xcode
                                      open build.xcode/mscore.xcodeproj

                                      In Xcode, run the ALL_BUILD scheme. It will compile all the files. Then run the install scheme. It will install the required files (fonts, images etc...) for runtime. Debug by running the mscore scheme.

                                      If MuseScore won't start

                                      You may get this error message on the Xcode Console when you try to run the mscore scheme:

                                      This application failed to start because it could not find or load the Qt platform plugin "cocoa".
                                      

                                      This mean MuseScore can't find the Qt plugins. You need to edit the mscore scheme to set the environment variable QT_PLUGIN_PATH to point to your Qt plugins directory. The default value for Qt 5.9 is:

                                      QT_PLUGIN_PATH=~/Qt/5.9/clang_64/plugins

                                      The actual value you need to set depends on your Qt version and where you installed it earlier on. You may also need to expand the tilde (~) to it's full value /Users/<username> to point to your home directory.

                                      If MuseScore doesn't start for any other reason then try reverting to factory settings, but make sure you revert the compiled mscore debug build rather than the official version if you have it installed.

                                      Debugging in Xcode 5+

                                      In Xcode 5+, you might need to uncheck “Allow debugging when using document Versions Browser” in Product > Edit Scheme... > Run mscore.app. Otherwise --NSDocumentRevisionsDebugMode YES gets passed to MuseScore, and it doesn't know how to handle it.

                                      In Xcode > 5, you'll find the menu item elsewhere: Product > Scheme > Edit Scheme...
                                      Select Run (on the left hand side), and select Options along the top of the form.
                                      Then you'll find "Allow debugging when using document Versions Browser" in the form. Uncheck the checkbox.

                                      Contributing

                                      The preferred way to contribute is via a Pull Request on GitHub. Patches are also taken on the Issue Tracker.

                                      Building a release for distribution

                                      Dependencies built with Homebrew will not run on older versions of macOS. Here is a zip file with the dependencies as "bottles" built on Mac OS X 10.7 (since February 2020 bottles built on MacOS 10.10 are used as binaries built on systems older than MacOS 10.9 don't pass Apple's notarization). They can be installed with brew install {file}.tar.gz

                                      upload
                                      Attachment Size
                                      bottles_MuseScore-2.0.zip 2.79 MB
                                      bottles-MuseScore-3.0.zip 2.91 MB
                                      bottles-MuseScore-3.0-yosemite.zip 2.94 MB

                                      Compile instructions (macOS 10.10+) - Git (markdown WIP)

                                        Use these instructions to compile MuseScore master branch on macOS 10.10+ (see http://doc.qt.io/qt-5/supported-platforms.html).

                                        From revision 5b7c72a onwards, committed 9 March 2017, the development version of MuseScore (master) requires Qt 5.9 or newer and a C++11 capable toolchain.
                                        The 2.x branches require Qt 5.4 however.

                                        Although MuseScore 3.x can be built with Qt 5.12, it is currently (November 2019) a business requirement that it supports macOS 10.10 and 10.11. Qt 5.12 does not support these earlier releases, and, thus, MuseScore 3.x for macOS is released with Qt 5.9; therefore, you should build and test with that Qt release as long as this business requirement persists. Code intentionally or unintentionally depending on Qt features and even fixes since 5.9 will not work in the release.

                                        Setting the build and development environment

                                        1. Install the latest version of Xcode from the Mac App Store.
                                          • To see what the latest version of Xcode that is supported by a specific macOS version, see the Wikipedia Xcode#Version_comparison_table.
                                          • E.g. Xcode 8.2.1 is the latest version of Xcode supported on macOS 10.11.5 (column "min macOS to run")
                                          • For older versions of macOS that do not support the latest version of Xcode, download an older version. To download older versions of Xcode, https://developer.apple.com/download/more/ (tip: Click on Description twice to sort by reverse order, which will display all Xcode versions to the top)
                                        2. Launch Xcode and accept the licence
                                        3. In Xcode, go to Preferences -> Download and install the Command line Tools. With Xcode 5-8, you might need to run xcode-select --install instead.
                                          • In Xcode8, select the Command Line Tools version via Preferences -> Locations -> Command Line Tools (pick "Xcode 8.2.1 ..." from the drop-down)
                                        4. a) Install the dependencies. If you are new to macOS development or do not have a preference, we suggest Homebrew
                                          ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
                                          brew install libogg libsndfile libvorbis pkg-config portaudio jack lame cmake git
                                          b) If you prefer MacPorts, choose the DMG of your OS and install MacPorts Open a terminal and enter the following (in your home):
                                          sudo port install git libsndfile pkgconfig lame portaudio jack cmake
                                        5. Qt is normally shipped via an online installer, which you should use if you are running the current version of macOS.
                                          • Download the open source version of Qt (not the commercial version), open the DMG and run the online installer. It will offer Qt 5.12. To get Qt 5.9, uncheck Latest releases, check LTS and press Refresh.
                                          • By default it will install Qt in your home directory. If you want to build a 2.x version of MuseScore, you also need to make sure to check Qt 5.4.2 for installation. To build MuseScore 2.x on older macOS versions, you should also install Qt 5.4.2 directly via the same online installer..
                                          • You only need to install the macOS and QT WebEngine components.
                                        6. Append the following line to ~/.profile (or alternatively ~/.bash_profile if you already have it)
                                          export PATH=$PATH:~/Qt/5.9.9/clang_64/bin
                                          and run
                                          source ~/.profile
                                          or
                                          source ~/.bash_profile
                                        7. Clone the repository from GitHub:
                                          git clone git://github.com/musescore/MuseScore.git

                                        Xcode 8 specific notes

                                        • Trying to compile MuseScore 3.x with Xcode 8 will fail with issue #298668: MuseScore compile issue on macOS 10.11.6 / Xcode 8.2.1 / Qt 5.9.8. This documents the workaround
                                        • (You need to be in the MuseScore source directory). Configure the repository with the patch:
                                          git remote add mattmcclinch https://github.com/mattmcclinch/MuseScore.git
                                        • fetch the 'xcode8' branch from its repository:
                                          git fetch mattmcclinch xcode8
                                        • apply the patch
                                          git cherry-pick mattmcclinch/xcode8

                                        If you plan to contribute to MuseScore, you can setup your own fork on GitHub and clone it instead. See the Git Workflow page.

                                        Building MuseScore

                                        1. In a terminal, enter:
                                          cd MuseScore
                                        2. Set the revision SHA1 for this build
                                          make -f Makefile.osx revision
                                        3. Start the actual compilation. It takes more than one hour on a MacBook 2 GHz but it's pretty fast on a MacBook Pro Core i7 (4 to 5 minutes max).
                                          make -f Makefile.osx release
                                        4. Call the install target. The bundle is copied from the Release directory into the applebuild directory. All resources (such as help and templates) are added to it
                                          make -f Makefile.osx install
                                        5. The package step. This target calls a script derived from this one. It creates a self-contained bundle, thanks to macdeployqt, by adding and stripping the Qt libraries into the MuseScore bundle. It also adds Qt plugins, PortAudio and libsndfile. A DMG file is the result
                                          make -f Makefile.osx package

                                        Debugging and developing MuseScore

                                        If you are a developer, look at the xcode target in the makefile. It generates a xcodeproj file. You can open this xcodeproj file and use the Apple IDE for tasks such as modifying, debugging and compiling MuseScore code. Run

                                        make -f Makefile.osx xcode

                                        Then open the xcodeproj bundle in Xcode

                                        open build.xcode/mscore.xcodeproj

                                        In Xcode, run the ALL_BUILD scheme. It will compile all the files. Then run the install scheme. It will install the required files (fonts, images etc...) for runtime. Debug by running the mscore scheme.

                                        If MuseScore won't start

                                        You may get this error message on the Xcode Console when you try to run the mscore scheme:

                                        This application failed to start because it could not find or load the Qt platform plugin "cocoa".

                                        This mean MuseScore can't find the Qt plugins. You need to edit the mscore scheme to set the environment variable QT_PLUGIN_PATH to point to your Qt plugins directory. The default value for Qt 5.9 is:

                                        QT_PLUGIN_PATH=~/Qt/5.9.9/clang_64/plugins

                                        The actual value you need to set depends on your Qt version and where you installed it earlier on. You may also need to expand the tilde (~) to it's full value /Users/ to point to your home directory. If MuseScore doesn't start for any other reason then try reverting to factory settings, but make sure you revert the compiled mscore debug build rather than the official version if you have it installed.

                                        Debugging in Xcode 5+

                                        In Xcode 5+, you might need to uncheck “Allow debugging when using document Versions Browser” in Product→Edit Scheme...→Run mscore.app. Otherwise --NSDocumentRevisionsDebugMode YES gets passed to MuseScore, and it doesn't know how to handle it. In Xcode > 5, you'll find the menu item elsewhere. Product→Scheme→Edit Scheme... Select Run (on the left hand side), and select Options along the top of the form. Then you'll find "Allow debugging when using document Versions Browser" in the form. Uncheck the checkbox.

                                        Contributing

                                        The preferred way to contribute is via a Pull Request on GitHub. Patches are also welcome on on the Issue Tracker.

                                        Building a release for distribution

                                        Dependencies built with Homebrew will not run on older versions of macOS. Here is a zip file with the dependencies as "bottles" built on Mac OS X 10.7. They can be installed with brew install {file}.tar.gz

                                        Compiling with crash reporter support

                                          Starting from the 3.0.3 version, MuseScore has a built-in crash reporter based on Google Breakpad and libcrashreporter-qt that is able to handle crashes and gives a possibility for a user to send crash reports to the pre-defined URL. Below are the instructions on how to use or disable this crash reporting facility.

                                          Enabling or disabling crash reporter

                                          By default, the crash reporter facility is disabled on master branch and is enabled for release branches on Windows. If you would like to change it, it can be done by changing BUILD_CRASH_REPORTER CMake variable. The following options are available for this:
                                          1) If you use CMake directly, just add -DBUILD_CRASH_REPORTER=ON (or OFF) option:
                                          cmake -DBUILD_CRASH_REPORTER=ON ..
                                          2) If you use the supplied Makefile or msvc_build.bat script, add that option to that script to the cmake command invocations.
                                          3) You can also edit CMakeCache.txt in the build.debug or build.release directory and change the BUILD_CRASH_REPORTER value, either manually or with cmake-gui. After editing it the following builds should use the value defined in CMakeCache.txt.

                                          Compiling with crash reporter support

                                          libcrashreporter-qt is stored in the MuseScore git repository as a submodule. If you cloned the source code from the repository you may need to pull that submodule. Use the following command to do it:
                                          git submodule update --init --recursive

                                          By default, the crash reporter sends crash reports to http://127.0.0.1:1127/post which may be useful while debugging it with a local copy of something like mini-breakpad-server. In order to change it edit the CRASH_REPORT_URL CMake variable as described above.

                                          In order for crash reports to be more useful you should extract debugging symbols for the binaries using dump_syms tool from Breakpad. Please refer to the Breakpad documentation for more details on how to do it. In brief, the process is approximately as follows:
                                          1) Ensure that your compiler generates debugging information (e.g. add the appropriate compiler flags or use the appropriate build types like Debug or RelWithDebInfo).
                                          2) Run dump_syms on the compiled binary (or on the separate debugging symbols file if available):
                                          dump_syms build.release/mscore/mscore > mscore.sym
                                          or
                                          dump_syms.exe mscore\RelWithDebInfo\MuseScore3.pdb > MuseScore3.sym
                                          3) Upload it to a server that is supposed to collect the reports.

                                          IDE Configuration

                                            This is a work-in-progress page that attempts to describe how to set up MuseScore development with different IDEs. Do you use an IDE that doesn't have any info here? Please, help others out and add the info for your IDE!

                                            Qt Creator (Windows, Linux)

                                            Qt Creator is the official IDE for Qt projects. It has many Qt-specific features that other IDEs don't have, or don't have as soon as Qt Creator has them.

                                            The only reason not to use Qt Creator would be if you already have a strong preference for a different IDE.

                                            Advantages

                                            • Detailed example projects. These allow you to test Qt features outside of MuseScore's huge codebase.
                                            • Visual Design mode for editing Qt's .ui (user iterface) files, such as MuseScore's playpanel.ui.
                                            • Qt language-aware. Proper syntax highlighting and debugger support for Qt-specific extensions to the C++ and JavaScript programming languages, such as signals and slots, QML, etc.
                                            • Cross-platform. Edit in the same environment on Windows, Mac and Linux.
                                            • Included with Qt by default. If you have Qt then you have Qt Creator!

                                            Coding style

                                            Download the file qt2-musescore.xml and import into Qt Creator via Projects > Code Style > Import... to have MuseScore's coding rules enforced automatically by the IDE.

                                            Keyboard Shortcuts

                                            A choice selection:

                                            • F2 - Follow symbol under cursor.
                                              • Click on a variable/function/class name and press this to be taken to its declaration. Useful if you don't know what something is or what it does.
                                            • Ctrl+Shift+U - Find references to symbol under cursor.
                                              • Show places where this variable/function/class is used anywhere in the project (i.e. not just in the current file).
                                            • Ctrl+Shift+R - Rename symbol under cursor.
                                              • Changes the name of a variable/function/class here and everywhere else it occurs, kind of like a "smart" find-and-replace.
                                            • F4 - Switch between header (file.h) and source (file.cpp) files.
                                            • Shift+F2 - Switch between function declaration and definition.

                                            See the full list of keyboard shortcuts and how to define your own.

                                            VSCode (Linux)

                                            There should be some config files already in .vscode.

                                            A popup will appear asking if you want to install the 'recommended extensions'. Install all the extensions that are recommended. For reference, these are:

                                            • Microsoft C/C++ tools (ms-vscode.cpptools)
                                            • CMake tools (ms-vscode.cmake-tools)
                                            • CMake (twxs.cmake)

                                            You may need to restart your editor at this point. If CMake tools complains about not being able to access files, try chowning the entire directory - you may have accidentally run a command as su. If you still get errors, try running the command CMake: configure or restarting your editor again.

                                            IntelliSense and other features (jump to definition, syntax highlighting, error checking) should now work. If you're encountering problems, message @jthistle on Telegram via the development chat.

                                            Advantages

                                            • A massive extensions database, allowing you to customize the editor to fit your needs perfectly
                                            • IntelliSense support (advance syntax highlighting, pre-compile error checking etc.)
                                            • Jump to definition/find usages support
                                            • Built-in intelligent debugging via gdb

                                            One disadvantage is that editing UI files is not easy with just VSCode. You may want to consider simultaneously installing QtCreator in order to make changes to the UI.

                                            Debugging with VSCode

                                            You can debug MuseScore through VSCode. You do first need to build manually however, so run make installdebug or similar to create a debug build. The default debug configuration runs from a debug build, so if you only build release, debugging will not work.

                                            Microsoft Visual Studio (Windows)

                                            XCode (Mac)

                                            If you have a Mac, XCode is the recommended IDE

                                            Finding your way around

                                            Testing

                                            Automated testing

                                            See Automated Testing

                                            Ubuntu / Linux

                                            • Ara Pulido on Desktop Testing in Ubuntu YouTube video
                                            • LDTP LDTP Python API or LDTP recorder
                                            • Mago Desktop testing on Ubuntu. Tests are written by hand using XML. Mago is build on top of LDTP

                                            Windows

                                            • Testing the User Interface with Automated UI Tests in Microsoft Visual Studio 2010. Tests are created by point and click
                                            • UI Automation Verify (UIA Verify) Test Automation Framework
                                            • Autoit : BASIC-like UI scripting language
                                            • AutoHotKey : Open source UI scripting for Windows. You can write a mouse or keyboard macro by hand or use the macro recorder.

                                            Cross platform

                                            • Systir. Tests written by hand in Ruby.

                                            Automated tests

                                            This is a short overview. For a more technical explanation, see the mtest README.

                                            Before any pull request is merged, it is required that it pass all of the automated tests which are set up in the mtest folder. The tests automatically perform actions which would be performed by a user, and create a new score, which is compared against the expected output.

                                            There are two places you can find mtests: in the mtest directory (a subdirectory of the musescore root directory), or in the build.*/mtest directory.

                                            In the root mtest directory

                                            Tests are arranged into different directories. For example, copy and paste tests are in mtest/libmscore/copypaste. Each test has a .mscx file without a -ref, which is the score that tests are performed on, and a counterpart .mscx file with a -ref. The -ref file is the reference file: once the non-ref file has had the tests performed on it, it's compared with the reference file. If the files are exactly the same, the tests pass. But you can't run tests in the root mtest directory.

                                            In the build.*/mtest directory

                                            Here, you can run tests, once you've built release, debug etc.

                                            Before you run any tests, make sure that your default style in MuseScore is the same as the MuseScore Default. As of version 3.1 there is a Reset to MuseScore Default button in the Format menu Style... dialog. Click that button prior to running ctest or mtest or any specific test executable. If you have your own styles you wish to preserve, save them in a style file that you can restore later.

                                            To run the entire suite of tests, first make the tests in the build.*/mtest directory. To run them all, run the mtest executable file that is created, or just run ctest.

                                            To run just a single suite of tests, enter the relevant directory, e.g. build.*/mtest/libmscore/copypaste/. Then, make the tests, and run the relevant executable file that is created, e.g. tst_copypaste.

                                            After running tests, depending on which tests you ran, loads of [testname].mscx files will be created. These are the files that are compared against the reference files in the root mtest directory. If there is a difference between them, the mtest will fail.

                                            Changing Tests

                                            If you have made a change that makes the output of a test different, you need to update the reference file(s). You can do this by running updateReference in the root mtest directory for whichever test you want to update, although this sometimes may not work. Or, you can manually copy accross the changed file(s), for example:

                                            cp build.debug/mtest/libmscore/copypaste/copypaste23.mscx mtest/libmscore/copypaste/copypaste23-ref.mscx
                                            

                                            Adding new tests

                                            To add a new test, edit the relevant tst_*.cpp file in the root mtest directory. It should be easy to figure out how these work.
                                            If you add a new test that diffs files, please create an updateReference script to copy the reference files when any future changes are made.
                                            If you have added a new file to an existing test, and it uses a " -ref" reference file for diff, please update the updateReference script in the test directory, to assist with future maintenance.

                                            Exploring code and data structures

                                            How to get started

                                            After you have downloaded a Nightly Build or made you own version, you are ready to explore data structures and code. In a score right click on a note or any other item and select "Object Debugger" from the right-click menu. This will give you an opportunity to explore the data structures. Also, there is "Edit → Debugger", that lets you explore the data in a score. Note: that debugger nowadays is only enabled when running MuseScore in 'experimental' mode, i.e. using the -e option, see also Command line options

                                            Getting started in the source tree

                                            MuseScore's main() function is in main/main.cpp. As with any C or C++ application, the main() function is the first thing that runs when the program is started. In MuseScore's case, the main() function hands over to another function called runApplication() in mscore/musescore.cpp. This function sets up the QApplication and then calls qApp->exec() to launch the Event Loop.

                                            The Event Loop continuously checks for events, including user input events such as mouse clicks and button presses, and then passes execution to the relevant event handler (e.g. QWidget::keyPressEvent()). Event handlers are just ordinary C++ member functions that happen to get called when an event happens. Event handlers can be installed on any widget (buttons, menus, dialogs, windows, etc.) and can be used to create or destroy other widgets as well as ordinary C++ objects. This is how execution is passed around the program.

                                            Most of the important code lives in the mscore and libmscore directories. The MuseScore class and its functions are declared in the header file mscore/musescore.h and defined in the companion source file mscore/musescore.cpp.

                                            Note: The MuseScore class is a subclass of QMainWindow, so in addition to its own functions (those declared in mscore/musescore.h and defined in the corresponding .cpp file), it has also access to all of the functions that belong to QMainWindow and its ancestor classes all the way back to QWidget, and eventually QObject.

                                            Commands are processed in MuseScore::cmd(). Most commands that modify the score are passed off to ScoreView::cmd in scoreview.cpp. If you put a breakpoint in ScoreView::cmd, you can find and then step into the function that processes a specific command. Commands like cut, copy, paste are posted as a new event right at the start of ScoreView::cmd. These events are then processed in ScoreView::normalCut, ScoreView::normalCopy, ScoreView::normalPaste. The paste execution ends up in mscore/libmscore/cmd.cpp Score::cmdPaste. Note that copy and paste put content onto the clipboard through the interface provided by Qt (in ScoreView::normalCopy()). Quite a few commands, like changing the duration of a note, are handled right at the end of this function where _score->cmd() is called. In mscore/libmscore you find the source for the various classes and the layout algorithm. If you sort the directory by file size, you'll easily spot where most processing is done: measure.cpp, score.cpp, cmd.cpp, undo.cpp., layout.cpp. edit.cpp and chord.cpp.

                                            Finding crashes

                                            Crashes are annoying to users and don't shed a good light on the software. Generally, all crashes are classified as "critical" bugs in the issue tracker.

                                            Crashes can be divided into two categories. Program errors where the operating system stops the further execution of a program, because the program has attempted to perform an illegal operation (for example a reference through a null pointer, accessing an non-allocated address or even a divide by zero). The other category is where the program logic tries to detect invalid conditions. That can either be in the MuseScore application code, or in the underlying Qt runtime. Qt provides a macro Q_ASSERT (). If during program execution the condition isn't met, a message is printed to the console (with qFatal) and the execution is aborted with abort(). The Qt runtime internally uses Q_ASSERT; MuseScore application code uses both Q_ASSERT and abort(), typically after printing a debug message to the console with (qDebug or qFatal). In Windows, that looks like this: crash-image.png

                                            The crashes in the first category are usually easy to find. The debugger will just stop and show you the location of where the exception occurred in the call stack. You then inspect the program logic. If no apparent solution springs to mind, you report your analysis in the issue tracker.

                                            Crashes in the second category are harder to find. Since MuseScore application code uses abort() in various places, you need to look at the debug message, and then search through the source to locate the abort(). This bug calls for the removal of direct use of abort () to facilitate the use of the next option. This option is to place a breakpoint in the message handler (see below). To catch an abort caused by Q_ASSERT, trapping the message handler can be the only way to breakpoint before the crash, since the Q_ASSERT can come from within the Qt runtime and it may not be possible to use a breakpoint.

                                            On Windows in more recent Qt versions, the Qt runtime abort () no longer activates the debugger, so the program just aborts without giving the developer the opportunity to inspect the call stack. Regarding this, we read in a Qt forum: If somewhere in the code a Q_ASSERT() evaluates false, the application is stopped with an info, where the Q_ASSERT() is and what expression evaluates false. If the application was run with a debugger, debugger is also stopped. If the developer wants to inspect a call stack, he must call qInstallMsgHandler() with a new MsgHandler, set a breakpoint in it and reproduce the bug.

                                            Such a message handler already exists - it is located just before the main() function in mscore/mscore/musescore.cpp. Set your breakpoint where indicated in the code. The message handler is also useful, if you see debug output (printed via qDebug) and want to find out where it originates.

                                            Note: you may have to set environment variable QT_LOGGING_TO_CONSOLE=1 to get qDebug messages to appear on QtCreator's Application Output window (noted by ericfont on Qt 5.12 on arch linux).

                                            Git workflow

                                              The development of MuseScore uses GitHub to host the code and manage the collaboration of developers. GitHub is based on git, a popular SCM, initially designed and developed by Linus Torvalds for Linux kernel development. If you're a developer who wants to work on the MuseScore source code and submit your changes to be merged into the main code, here's how. Thanks to Diaspora for their developer guide, which inspired this one.

                                              Git references

                                              • Got 15 minutes and want to learn Git?
                                              • Fork a repo at GitHub: Most of the following on this page (on musescore.org) is from this page on github.com.
                                              • Git documentation - includes videos.
                                              • Git Ready - Learn Git one commit at a time.
                                              • Pro Git book - Free online and can be bought in paper form.
                                              • Git Cheat Sheet - From setup to advanced command in a condensed form, color your git diff, status, etc...
                                              • How to Write a (great) Git Commit Message - As trivial as it may sound, those 7 rules help getting the most out of the commit history

                                              Suggested workflow

                                              If you don't have an account on GitHub, create one for free first. Also make sure you set up git on your computer. It's recommended to use SSH to access your own git fork. This workflow is a command line workflow. If you prefer using a UI, GitHub also provides a UI tool for Mac and Windows that can automate some of the following operations.

                                              Summary

                                              1. Fork on GitHub (click Fork button)
                                              2. Clone to computer, use SSH URL ($ git clone git@github.com:you/MuseScore.git)
                                              3. Don't forget to cd into your repo: ($ cd MuseScore/)
                                              4. Set up remote upstream ($ git remote add upstream https://github.com/musescore/MuseScore.git)
                                              5. Create a branch for new issue ($ git checkout -b 404-new-feature)
                                              6. Develop on issue branch. [Time passes, the main MuseScore repository accumulates new commits]
                                              7. Commit changes to your local issue branch. ($ git add . ; git commit -m 'commit message')
                                              8. Fetch (download) upstream's master branch ($ git fetch upstream master)
                                              9. Update local master to match upstream's master ($ git checkout master; git merge upstream/master)
                                              10. Rebase issue branch ($ git checkout 404-new-feature; git rebase master)
                                              11. Repeat steps 7-11 until dev is complete
                                              12. Push branch to GitHub ($ git push origin 404-new-feature)
                                              13. Start your browser, go to your GitHub repo, switch to "404-new-feature" branch and press the [Pull Request] button

                                              After having made a Pull Request don't pull/merge anymore, it'll mess up the commit history. If you (have to) rebase, use 'push --force' ($ git push --force) to send it up to your GitHub repository, this will update the PR too. Be careful not to do this while the core team is working on merging in your PR. Note (to non-UNIX users): the "$ " of the commands mentioned throughout this page is (meant to be) the shell prompt and as such not to be typed in, your actual shell prompt may look different.

                                              Fork MuseScore repo to your own account

                                              This will create a copy of MuseScore repository to your own account. To fork, press the fork button in the top right corner on MuseScore GitHub page.

                                              It is also a good idea to disable GitHub Action for your clone since normally you don't need them. See here how to switch of these actions.

                                              Clone your GitHub fork to your computer

                                              Run a clone command against your GitHub fork. It will look something like this, except that it will use your GitHub account name, instead of "[you]":

                                              $ git clone git@github.com:[you]/MuseScore.git
                                              $ cd MuseScore 
                                              

                                              This command downloads your copy of MuseScore to a git repository on your development machine. The next command changes directory into the newly created MuseScore directory.
                                              optional: you can choose to clone just a single specific branch instead of all of them by using the command

                                              $ git clone -b specific-branch-name git@github.com:[you]/MuseScore.git
                                              

                                              (optional but recommended) In your clone directory, copy the file build/git/hooks/post-checkout to the directory .git/hooks in order for mscore/revision.h to be maintained automatically by git. See build/git/hooks/README for details. Note that the .git directory is hidden. Note: as of cbd5126 (Oct 30, 2020) in the master branch and db7daf6 (Nov 3, 2020) in the 3.x branch this isn't needed anymore and can even harm.
                                              To build MuseScore, you will need to install dependencies, and run the build process. Check the instructions for your platform in the developer handbook. Note that the git clone command is using SSH in this case. You need to have SSH set up on your machine. A git:// URL would not work for your local fork, you will not be able to push on it. Alternatively you can use the HTTPS URL. If you already cloned MuseScore main repository with

                                              $ git clone git://github.com/musescore/MuseScore.git
                                              

                                              You can change the remote url of the origin to your fork with

                                              $ git remote set-url origin git@github.com:[you]/MuseScore.git
                                              

                                              Choose something to work on

                                              If you don't have a feature in mind, check out the issue tracker, or come ask in IRC (#musescore on freenode.net).

                                              Create a topical development branch

                                              Before you start working on a new feature or bug fix, create a new branch in your local repository that's dedicated to that change. Name it by issue number (if applicable) and description. For example, if you're working on issue #78359, a slur layout problem, create a new branch called 78359-slurlayout, like this:

                                              $ git checkout -b 78359-slurlayout
                                              

                                              Write some code!

                                              We are able to offer much help here :). If you can, provide some tests. See the mtest directory. When you have got something working, commit the changes to your branch on your local Git repo. First, add the files you want to commit, and then commit. Don't forget to provide a meaningful message (see this example) and make sure it adheres to these simple rules). Use git status and git diff to see which files can be added and committed.

                                              $ git status
                                              $ git status [filename]
                                              $ git add [filename]
                                              $ git commit -m 'Fix #78359: Some kind of descriptive message' 
                                              

                                              If your commit message starts with Fix #xxxxx, with xxxx the issue number in the issue tracker, the issue will be marked as fixed automatically when your commit is pushed in the main repository.

                                              Keep your repo up to date with the main repo

                                              In order to get the latest updates from the main repository, do a one-time setup to establish it as a remote by entering:

                                              $ git remote add upstream git@github.com:musescore/MuseScore.git
                                              

                                              The main repo will be now known as upstream. Your fork is known as origin. The origin remote is automatically created after cloning your GitHub fork to your computer. To verify that you have two remotes, you can type:

                                              $ git remote
                                              

                                              Rebase your branch on the latest upstream

                                              To keep your development branch up to date, rebase your changes on top of the current state of the upstream master.

                                              # get the changes from upstream
                                              $ git fetch upstream master
                                              # switch to your local master branch
                                              $ git checkout master
                                              $ git rebase upstream/master
                                              # switch to your topical branch
                                              $ git checkout 78359-slurlayout
                                              # make sure all is committed as necessary in branch before rebasing
                                              $ git rebase master
                                              

                                              Rebase will put all your commits in the branch on hold, get the last changes, and apply your commits on top of it. You might need to resolve conflicts if you changed a file that has been changed in the main repo. To do so, edit the files, then:

                                              $ git add [filename]
                                              $ git rebase --continue 
                                              

                                              Another (and shorter) way to update your development branch is $ git pull --rebase upstream master. Should you have changes that are not yet commited to your branch, use $ git stash before the rebase and $ git stash pop after.

                                              Make a Pull Request to send your changes to MuseScore

                                              When you are ready to send your modified code to MuseScore, push your branch in your origin remote.

                                              $ git push origin 78359-slurlayout
                                              

                                              Then do a pull request to MuseScore on GitHub. Go to your GitHub page, select the branch on the left, and press the Pull Request button at the top. Choose your branch, add a comment and submit your pull request.

                                              If you are fixing an issue from the tracker, set the issue's status to "PR created" with a link to your pull request on GitHub. One of the developers with push rights on the main repo will merge your request ASAP, or leave a comment to say why it hasn't been merged and what needed to be done to get it merged.

                                              Important: If you haven't signed the MuseScore CLA yet, do this first as it's a requirement for your pull request to be accepted.

                                              Editing your Pull Request

                                              You can continue to push new commits to the branch on GitHub until the pull request is merged. If you amend or squash existing commits, or edit history in any way, then you need to do a force push ($ git push --force) to get the changes to appear online, but be aware that the whole point of requiring a force push is to make it difficult to overwrite commits accidentally.

                                              Once the pull request is merged the code becomes part of the main repository and you will no longer be able to edit it (except by creating a new PR). Your changes will be available for other people to test in the next nightly build.

                                              Advice & tips

                                              Don't use git commit -a

                                              $ git commit -a
                                              

                                              This will perform git add for all unstaged files and commit (equivalent to "$ git add . ; git commit"). You probably don't want to do that. It's better to use git status and add files individually before committing.

                                              Don't use git fetch without specifying a branch

                                              $ git fetch upstream # this will fetch all upsteam branches
                                              $ git fetch upstream master # this will fetch only the master branch
                                              

                                              Most work of your work will be done on top of upstream's master branch, so fetching commits from other upstream branches is a waste of time, bandwidth, and disk space. On the rare occassion that you need to work on top of a different upstream branch, simply specify its name instead of master (or specify both at once!).

                                              Note: your fork on GitHub will contain code from all upstream branches in the state they were in when you pressed the "fork" button. You should delete any branches that you don't need.

                                              Delete a branch

                                              To delete a local branch:

                                              # will first check if the branch has been merged
                                              $ git branch -d [branch-name]
                                              # will delete the branch authoritatively
                                              $ git branch -D [branch-name]
                                              

                                              To delete a remote branch:

                                              $ git push origin --delete [branch-name]
                                              

                                              Apply a commit from another branch

                                              Use $ git cherry-pick [commit-SHA] to copy a commit from any branch and apply it on the current branch. If there are merge conflicts then you will be prompted to resolve them. Once this is done, add the files ($ git add [files]) and continue ($ git cherry-pick --continue). You can use $ git cherry-pick --abort to abandon an in-progress cherry-pick and return the repository to the state it was in before.

                                              Amend the last commit

                                              If you want to change the commit message for the last commit, you can do so with $ git commit --amend. If you made a mistake in the actual code, or if you forgot to add something, simply edit the code files to fix the mistake and then do:

                                              $ git add [files]
                                              $ git commit --amend
                                              

                                              While this updates the code and the commit message, it keeps the original commit author and timestamp and adds a new "committed-by: [you] [date+time]" field to the log. Consider passing these additional options to "$ git commit --amend":

                                              • "--no-edit" - update the code but use the old commit message
                                              • "--reset-author" - don't write a "committer" to the log, instead update the commit author and set the timestamp to the current time

                                              Amending a commit counts as editing history, so think twice before doing this if you have already shared you commit with other people (editing a PR is ok as long as the PR has not been merged).

                                              Squash your commits

                                              Once you made a pull request, you might be asked to squash your commits together. For example, you might have created several commits to fix a single issue or to develop a single feature and it doesn't make sense to keep all these commits in the MuseScore repository history. Instead, you need to combine these multiple small commits into one or more larger commits.

                                              The easy way to squash commits is via a "soft reset and recommit". For example, to squash the last 2 commits into a single commit:

                                              git reset --soft HEAD~2
                                              git commit -m "useful commit message"
                                              

                                              This removes the last two commits from the history, but keeps the code changes from those commits in the staging area so that they are immediately applied again in the new commit. You can edit the files before committing them (or afterwards with "$ commit --amend"), but you will need to add the files again using "$ git add" first.

                                              You can increase the number after "HEAD~" to squash more commits. If you've made lots of commits and you can't be bothered to count them, you can replace "HEAD~2" with the SHA of the last commit that you don't want to be squashed (use git log to view the commit SHAs).

                                              For the new commit message, you might want to include the old commit messages as a bullet list under a main summary message. You can use a simple "$ git commit" without "-m" to open a text editor to write a multi-line commit message, and you can even pre-populate the editor with the old commit messages by doing "git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})""

                                              If you need to do something more complicated than combining multiple commits into one then you need to perform an "interactive rebase". See editing history immediately below.

                                              Amending a commit counts as editing history, so think twice before doing this if you have already shared you commit with other people (editing a PR is ok as long as the PR has not been merged).

                                              Editing history (changing previous commits)

                                              Editing history is discouraged on the main repository because it creates problems for other developers when they try to merge in the changes. However, this doesn't apply to your fork (assuming it is only used by you) so you are welcome to edit your past commits as much as you like until they are merged into the main repository.

                                              Simple edits are best performed with "$ git commit --amend" (see amend the last commit) and "$ git reset --soft" (see squash your commits). Those methods allow you to edit a commit, and to combine multiple commits into one big commit (i.e. many-to-one) respectively, but they can only operate on the most recent commit(s). For anything else, you need to perform an interactive rebase.

                                              An interactive rebase allows you to do many things to past commits, even when there are later commits that you don't want to change, such as:

                                              • reorder commits
                                              • delete (drop) a past commits
                                              • insert new commits before later commits
                                              • squashing past commits (many-to-one)
                                              • split commits (one-to-many)
                                              • shuffle code changes between commits (many-to-many)

                                              To perform an interactive rebase, do:

                                              $ git rebase -i [commit-SHA]
                                              

                                              This will open an editor that displays a list of all the commits after the one specified (i.e. not including that one) and allows you to choose what you would like to do with each one. The most useful options are:

                                              • pick - keep this commit unchanged
                                              • edit - edit the commit (or insert new commits after it)
                                              • drop - delete this commit and all its code changes
                                              • squash - combine with previous "picked", edited or inserted commit

                                              When you save and close the editor, git rebase will following your "recipe" and replay the commits, skipping any marked "drop", pausing on any marked as "edit" to allow you to change them and/or add new commits, and prompting you to set a new message for any marked "squash". If any merge conflicts arise (e.g. due to your edits) then git rebase will pause on those commits too so that you can fix the conflicts. You can use $ git rebase --continue to resume after a pause, or $ git rebase --abort at any time to return the repository to the state it was in before you began the rebase.

                                              See this article to find out about two more handy options to git rebase: --fixup and --autosquash.

                                              Alternatives to interactive rebase

                                              Rebasing is a powerful tool, but it can be quite difficult to understand. When editing history, you might prefer to use the following workflow instead:

                                              $ git branch duplicate  # create a copy of the current branch, but stay on current branch
                                              $ git reset --hard   # delete all commits on current branch after the one specified
                                              

                                              Now you have moved "back in time" and are able to use the usual tools ($ git commit, $ git commit --amend, $ git reset --soft, etc) on older commits. Once done with the old commits you can cherry-pick the later commits (not necessarily in the same order as they were in before) from the duplicate branch.

                                              Of course, this is essentially doing manually what an interactive rebase would do for you automatically, but it can be easier to manage because you can decide what to do as you go along; you are not forced to come up with a complete plan at the outside as you are with an interactive rebase.

                                              Create and apply a patch

                                              It's better to contribute with a pull request than a patch but if you need to make a patch for any reason here is how. You have created a local branch with the following command, made some changes and commit locally one or more times.

                                              $ git checkout -b 404-new-feature
                                              

                                              To create a patch against the master branch, run

                                              $ git format-patch master --stdout &gt;  404-new-feature.patch
                                              

                                              To apply the resulting patch,

                                              # get stats about the patch without applying it
                                              $ git apply --stat 404-new-feature.patch
                                              # check if the patch can be applied without problem
                                              $ git apply --check 404-new-feature.patch
                                              # apply the patch
                                              $ git am --signoff &lt; 404-new-feature.patch 
                                              

                                              Test someone else's branch

                                              $ git checkout -b [new-branchname] master
                                              $ git pull git@github.com:[someoneelse]/MuseScore.git [branchname]
                                              

                                              Or:

                                              $ git fetch https://github.com/[someoneelse]/MuseScore.git [branchname]:[new-branchname]
                                              

                                              If you test this person's code often you could add their repository as a remote:

                                              $ git remote add [other-person] https://github.com/[other-person]/MuseScore.git
                                              

                                              Now you can get their code like this:

                                              $ git fetch [other-person] [their-branch-name]
                                              $ git checkout [other-person]/[their-branch-name] # will go into "detached HEAD" state
                                              

                                              "Detached HEAD" simply means you are not on a branch. This is OK as long as you don't plan to make any changes to the other person's code.

                                              Work on someone else's branch

                                              Don't do this unless you have to. It's usually best to wait for the other person's PR to get merged into MuseScore's master branch before you try to build anything on top of it.

                                              If you do have to do this, follow the steps test their code (above) until you reach the detached HEAD state. Now do this:

                                              $ git checkout -b [your-branch-name] # create local branch
                                              # now make a change to the code
                                              $ git commit -m "really useful message" # commit the change
                                              # make more changes and commit them...
                                              

                                              Let's say you have added 3 commits on top of their code, but now they have made changes to their code and you want to update your code with their changes.

                                              $ git checkout [your-branch-name]
                                              $ git fetch [other-person] [their-branch-name]
                                              $ git rebase --onto [other-person]/[their-branch-name] HEAD~3
                                              

                                              This takes the last 3 commits in your branch and replays them on top of their branch. We have to give the number of commits in case the other person has edited history (used rebase, commit --amend or similar), otherwise git won't be able to tell where their code ends and your code begins (because their commit checksums will have changed).

                                              Fetch all PRs submitted to upstream

                                              If add this string to your MuseScore/.git/config under section [remote "upstream"]:

                                              fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*

                                              Then whenever you fetch upstream, git will fetch all PRs submitted to musescore. Then you can easily checkout by PR number ####:

                                              $ git checkout upstream/pr/####
                                              

                                              Fix multiple issues in a single commit

                                              If a commit fixes multiple issues, then include each issue number in the commit message, e.g.:

                                              "Fix #xxxxx, fix #yyyyy, fix #zzzz: message"
                                              

                                              so that the issue tracker will update each issue and set their status to fixed.

                                              Keep PR's artifacts on AppVeyor (for Windows) resp. generate them on Github (for Mac and Linux AppImage)

                                              If you want someone to test the changes you made in the PR with the compiled package, you need to enable keeping artifacts on AppVeyor resp. generate them on Github (for Mac and Linux AppImage).

                                              AppVeyor won't keep the artifacts from every PR. It is done to optimise the storage usage AppVeyor granted us as an open source project.

                                              To keep/generate the packages in your PR, add "collect_artifacts" to the commit message title (not a commit message body).
                                              Note: as of lately this is no longer needed for the master branch (it still is for the 3.x branch), there now these artifacts are build always, and on GitHub rather than Travis CI and/or AppVeyor. That does mean though that you need to have a GitHub account to be able to download those artifacts.

                                              Example:

                                              Fix #222222: Crash on doing something | collect_artifacts
                                              
                                              Updated data structures as they were missing a lot of the good stuff.
                                              Optimized the code in only apparently mysterious ways, thus i am writing
                                              this awesome note that clarifyies what i did, so the next developer looking 
                                              at it can easily make sense of - and maybe even learn from - my changes.
                                              

                                              You may have noticed at first glance that this commit message is just slightly longer than 50 characters, which against best practice. This is the exception to the rule, but anyhow you will still want to aim for 50 chars maximum._

                                              Run tests on personal Travis

                                              The MuseScore development infrastructure uses Travis Continuous Integration to run tests on every commit and PR submitted the upstream MuseScore repository, but now you can utilize Travis infrastructure for your own person GitHub branches.

                                              1. Go to https://travis-ci.org/ and create an account using your GitHub account
                                              2. Synchronize repositories with your GitHub (should import all your GitHub repos)
                                              3. Enable the GitHub->Travis build hook for MuseScore in https://travis-ci.org/profile/username by turning on the switch next to username/MuseScore
                                              4. Click the gear button (or go to https://travis-ci.org/username/MuseScore/settings) to configure following settings for this repo

                                              5. Enable Travis setting for "build pushes"

                                              6. Optional: add environment variable NOTIFICATION_EMAIL and set to your email address, if you want to get an email when the build completes

                                              Now whenever you push to your GitHub, it will trigger the .travis.yml script, and you can see the the status of the build at https://travis-ci.org/repositories. At this point, will just run tests, but if you would like to also produce a Linux AppImage, follow these next instructions to utilize Bintray:

                                              Upload AppImages to personal Bintray

                                              The above steps to run Travis builds actually also create a portable AppImage so you can test out your commits on (almost) any Linux machine. But are a few more things you need to configure in order for Travis to be able to upload the AppImages to Bintray.

                                              1. Complete the steps above to run tests on personal Travis
                                              2. Go to https://bintray.com and create an account using your GitHub account
                                              3. In https://bintray.com/username settings for repository, create a new "generic" repository named "MuseScoreDevelopment" (this is where the AppImages will be uploaded to)
                                              4. Go to https://bintray.com/profile/edit, click on API key
                                              5. Generate a Bintray API key and copy to clipboard
                                              6. Go to https://travis-ci.org/username/MuseScore/settings and add following environment variables:

                                              7. BINTRAY_API_KEY with value you paste from your clipboard

                                              8. BINTRAY_USER set to whatever your Bintray user name is (should be same as GitHub username if you created Travis and Bintray accounts from GitHub)
                                              9. APPIMAGE_UPLOAD_BRANCHES set to a list of branches (separated by spaces) that you want to upload builds for (or use the magical string "ALL" to upload builds from all branches).
                                              10. APPIMAGE_BUILD_ARCHS set to a list of CPU architectures, e.g "x86_64 i686 armhf" (enclosed in quotes), to build AppImages for.

                                              Now try adding a commit to one of the branches you listed in APPIMAGE_UPLOAD_BRANCHES, and wait ~20 minutes. If an AppImage isn't uploaded, look at the bottom of the logs your most recent Travis-ci build jobs for bintray.sh upload sub-jobs. These AppImages will be useful to share with anyone who you want to test our your new feature or bug fix! Please post the link as a comment to your PR, so other devs can easily try it out and provide feedback!

                                              MuseScore coding rules

                                              Note: This document is not valid anymore for the master branch (it still is for the 3.x branch though).
                                              For the master branch coding style see https://github.com/musescore/MuseScore/wiki/CodeGuidelines

                                              The coding rules aim to guide MuseScore developers in writing understandable and maintainable code, whilst minimizing confusion and surprise.

                                              As usual, rules are not set in stone. If you have a good reason for breaking one, firstly, make sure that at least some other developers agree with you, especially if they are working on the same part of the codebase.

                                              Submitting code

                                              To submit code to MuseScore main repository, you need to sign the Contributor License Agreement. Your contribution can be a patch, or pull request, and should obey the following rules.

                                              File format

                                              • All code is UTF8, only ASCII to be used in C++ code for max. portability, UTF8 can be used in "QString"s though.
                                              • Use UNIX linefeed.

                                              User visible texts

                                              See Text style guide

                                              Coding style

                                              For historical reasons, MuseScore uses a special indenting scheme close to the Banner style. Take a closer look of the examples above to become familiar with it - particularly, the use of braces.

                                              If you are using QtCreator, you can download and then import qt2-musescore.xml either locally for the mscore project via Projects > Code Style > Import... or globally via Tools > Settings > C++ > Code style to automate many of the behaviors described below.

                                              Indentation & whitespaces

                                              • Use six (6) spaces for indentation, no tabs.
                                              • Use blank lines to group statements together where suited.
                                              • Always use only one blank line.
                                              • If a multiline conditional is required, use 3 spaces from the 2nd line on.
                                              Pointers and references

                                              For pointers or references, always use a single space after an asterisk (*) or an ampersand (&), but never before. Avoid C-style casts when possible:

                                              char* blockOfMemory = reinterpret_cast<char*>(malloc(data.size()));
                                              -NOT-
                                              char *blockOfMemory = (char *) malloc(data.size());

                                              Of course, in this particular case, using new is the better choice. Avoid C++ functional style casts too:

                                              return static_cast<int>(i);
                                              -NOT-
                                              return int(i);

                                              Yes, these require more typing and yes they may look ugly, but that way they do stick out, are easier searchable and the compiler can detect errors in their use better. But see also below.

                                              Returning pointers

                                              Use C++'s "nullptr" rather than "0":

                                              return nullptr;
                                              -NOT-
                                              return 0;
                                              Operator names and parentheses

                                              Do not use spaces between operator names and function names. The equation marks (==) are a part of the function name, and therefore, spaces make the declaration look like an expression:

                                              operator==(type)
                                              -NOT-
                                              operator == (type)
                                              Binary operators

                                              Use a space before and after every binary operator, except no spaces around "->", and only a space after ",":

                                              for (int i = 0; i < firstScore->excerpts().count(); i++)
                                              -NOT-
                                              for (int i=0; i<firstScore->excerpts().count(); i++)
                                              Expressions in parentheses

                                              Do not put a space after opening parenthesis. Do not put a space before closing parenthesis:

                                              (expression)
                                              -NOT-
                                              ( expression )
                                              Function names and parentheses

                                              Do not use spaces between function names and parentheses:

                                              void mangle()
                                              -NOT-
                                              void mangle ()
                                              Keywords

                                              Always use a single space after a keyword, and before a curly brace:

                                              if (foo) {
                                                    }
                                              -NOT-
                                              if(foo){
                                                    }

                                              Braces

                                              As a base rule, place the left curly brace on the same line as the start of the statement and indent the closing one. This is know as Banner style indentation.

                                              if (codec) {
                                                    }
                                              -NOT-
                                              if (codec)
                                              {
                                              }

                                              Exception: Function implementations always have the left brace on a new line and indented. Class declarations don't.

                                              static void foo(int g)
                                                    {
                                                    qDebug("foo: %i", g);
                                                    }
                                              class Moo {
                                                    };

                                              Use curly braces when the body of a conditional statement contains more than one line, and also if a single line statement is somewhat complex. Otherwise, omit them:

                                              if (address.isEmpty())
                                                    return false;
                                              for (int i = 0; i < 10; ++i)
                                                    qDebug("%i", i);
                                              -NOT-
                                              if (address.isEmpty()) {
                                                    return false;
                                                    }
                                              for (int i = 0; i < 10; ++i) {
                                                    qDebug("%i", i);
                                                    }

                                              Exception 1: Use braces also if the parent statement covers several lines or if it wraps:

                                              if (address.isEmpty()
                                                 || !isValid()
                                                 || !codec) {
                                                    return false;
                                                    }

                                              Exception 2: Use braces also in if-then-else blocks where either the if-code or the else-code covers several lines:

                                              if (address.isEmpty()) {
                                                    --it;
                                                    } 
                                              else {
                                                    qDebug("%s", qPrintable(address));
                                                    ++it;
                                                    }
                                               
                                               -NOT-
                                               
                                              if (address.isEmpty())
                                                    --it;
                                              else {
                                                    qDebug("%s", qPrintable(address));
                                                    ++it;
                                                    }
                                              if (a) {
                                                    if (b)
                                                          ...
                                                    else
                                                          ...
                                                    }
                                               
                                               -NOT-
                                               
                                              if (a)
                                                    if (b)
                                                          ...
                                                    else
                                                          ...

                                              Use curly braces when the body of a conditional statement is empty:

                                              while (a) {}
                                              -NOT-
                                              while (a);

                                              Parentheses

                                              Use parentheses to group expressions:

                                              if ((a && b) || c)
                                              -NOT-
                                              if (a && b || c)
                                              (a + b) & c
                                              -NOT-
                                              a + b & c

                                              Class Scoping

                                              All class scopes should be indented 3 spaces. This includes "slots" and "signals."

                                              class Foo {
                                                 public:
                                                    Foo();
                                                 private:
                                                    void bar();
                                              }
                                              -NOT-
                                              class Foo {
                                              public:
                                                    Foo();
                                              private:
                                                    void bar();
                                              }

                                              Names

                                              Naming conventions are similar to Qt.
                                              Names are of "camel" type, instead of "mops_klops" write "mopsKlops".
                                              User defined types are capitalized. Start the names of non-type entities with lowercase. Preprocessor defines are all uppercase.

                                              Do not encode type information in a name.

                                              Typical prefixes

                                              The prefix "r" like in Staff::rstaff() means "relative" - in this example the returned staff index is relative to the part.

                                              Casting

                                              Safer conversion

                                              (Introduced in MuseScore 3)
                                              Use safer type conversion:

                                              Chord* chord = toChord(e);
                                              -NOT-
                                              Chord* chord = static_cast<Chord*>(e);
                                              Static casting

                                              When possible, static_cast is preferred over reinterpret_cast:

                                              Measure* m = static_cast<Measure*>(measureBase);
                                              -NOT-
                                              Measure* m = reinterpret_cast<Measure*>(measureBase);

                                              Type checking

                                              (Introduced in MuseScore 3)
                                              Shorter and easier to read:

                                              if (e->isChord())
                                              -NOT-
                                              if (e->type() == Element::Type::Chord)

                                              Primitive Types

                                              unsigned ints

                                              Use "unsigned" for unsigned ints:

                                              unsigned i;
                                              -NOT-
                                              unsigned int i;
                                              signed ints

                                              Use "int" for signed ints:

                                              int i;
                                              -NOT-
                                              signed i;
                                              chars

                                              Make sure to use signed char or unsigned char every time it matters whether it should be able to hold negative values or values greater than 127, respectively, do NOT use just plain char in those cases. Whether an unqualified char is signed or unsigned is implementation defined and varies between the platforms MuseScore gets build for/on.

                                              Loops

                                              for

                                              Use C++11's "for" instead of Qt's "foreach":

                                              for (Element* e : m->el()) {
                                              -NOT-
                                              foreach (Element* e, m->el()) {

                                              If you happen to be fixing some code and see a "foreach", please change that loop into a "for".

                                              Pathnames

                                              Use "/" as the path separator, not QDir::separator(), see #273963: QDir::separator() vs. "/"

                                              Other MuseScore 3 style changes

                                              MuseScore 3 programming style changes may be found here:
                                              https://github.com/musescore/MuseScore/blob/master/mscore3.txt

                                              Qt Debugging constructs

                                              Q_ASSERT(bool test) should be used for errors for which musescore can still continue on. Q_ASSERT does nothing when built in release mode, but will halt execution with a diagnostic being printed when built in debug mode.

                                              To avoid compiler warnings due to unused parameters, use Q_UNUSED(var) rather than commenting out the variable name in the method definition. This also allows for conditional compiles, i.e. variables that are used in some setups but not others.

                                              upload
                                              Attachment Size
                                              qt2-musescore.xml 1.93 KB

                                              Proposed changes to coding style

                                                How to use this page

                                                Feel free to edit this page to add proposals or add new information to existing proposals. Any discussion should take place in the forums or Telegram chat. Links to the relevant discussions can be placed under each proposal.

                                                You can also add yourself as a supporter or opponent of each proposal, with an optional clarifying statement. You can also stay neutral.

                                                Support
                                                - @user1
                                                - @user2, providing that we...

                                                Neutral
                                                - @user3

                                                Oppose
                                                - @user4

                                                The poll exists to give an indication of the level of support: it does not guarantee that a particular proposal will be adopted/rejected.

                                                Code formats

                                                The formats currently in use:

                                                • C++ (*.cpp, *.h), with or without Qt extensions, and the few pure C (*.c) files
                                                • CMake (CMakeLists.txt, *.cmake)
                                                • JavaScript (*.js), including Qt QML (*.qml)
                                                • Python (*.py)
                                                • Shell (*.sh), including Bash and other Unix shells. Excludes Windows CMD and Powershell.
                                                • CMD (*.bat, *.cmd)
                                                • XML (*.xml), including MSCX (*.mscx), Qt UI (*.ui), SVG (*.svg)
                                                • JSON (*.json)
                                                • YAML (*.yml, *.yaml)

                                                You can use the following command to print a list of the different file extensions used in the repository, along with the number of files with that extension:

                                                git ls-files | sed -E -e 's|.*/||' -e 's|.*\.|.|' | sort | uniq -c | sort -k1,1r -k2,2df | less

                                                Sample output (annotated and abbreviated):

                                                   1679 .h
                                                   1607 .mscx
                                                    851 .cpp
                                                    550 .xml
                                                     28 .in       # includes '.h.in', '.xml.in' and similar (CMake configured files)
                                                     16 .mscz
                                                     16 README    # file has no extension
                                                     12 .bat
                                                     12 LICENSE
                                                      4 Makefile
                                                

                                                Use the following command to fold .*.in configuration files into the parent extension while keeping pure .in files separate:

                                                git ls-files | sed -E -e 's|.*/||' -e 's|.*(\..+)\.in$|\1|' -e 's|.*\.|.|' | sort | uniq -c | sort -k1,1r -k2,2df | less

                                                Now file names ending .h.in will be included in the count for .h, etc., while the count for .in will only include files that have no other extension.


                                                Multi-format proposals

                                                The following proposals affect more than one type of file.

                                                CI tests to enforce coding rules

                                                Where possible, code rules should be enforced by passing code through a formatting tool as part MuseScore's continuous integration tests. The test should fail if the code is not formatted correctly.

                                                If a style is strictly enforced then developers can pass code through Git's smudge and clean filters to cause it to be formatted in their preferred style during checkout, and back to the standard style during checkin, as demonstrated here. It doesn't matter which style is used in the repository as long as it is enforced properly.

                                                Primarily affects C++ files, but could potentially include other formats too.

                                                Update: MuseScore's coding style is now supported by Uncrustify. Autoformatting to other styles is demonstrated here.

                                                PROS
                                                - Code would be formatted consistently
                                                - Easier to read and maintain, etc.
                                                - Fewer nitpicking comments during pull request reviews

                                                CONS
                                                - Loss of flexibility (formatting tools are extremely pedantic)

                                                Support
                                                - @shoogle
                                                - @igor.korsukov
                                                - @Jojo-Schmitz, might be difficult to impossible for third-party code though. Also this would need to allow for occasional exceptions.
                                                - @Spire42

                                                Neutral
                                                - @dmitrio95, I am not sure that any formal coding style would be the best choice in all situations.
                                                - @marcsabatella, if it's proven flexible enough to be viable I'd support

                                                Oppose
                                                - @mirabilos
                                                - @Howard-C, it can sometimes expect very ugly results

                                                No substantial changes to coding style

                                                MuseScore currently uses 6 space banner-style indentation. While this may not be what most programmers are used to, the cost of changing it now far outweights the benefits.

                                                Developers who don't like this style can pass code through Git's smudge and clean filters to cause it to be formatted in their preferred style during checkout, and back to MuseScore style during checkin, as demonstrated here.

                                                void myFunc(bool b)
                                                      {
                                                      if (b) {
                                                            // do something
                                                            // ...
                                                            }
                                                      else {
                                                            // do a different thing
                                                            // ...
                                                            }
                                                      }

                                                Note that support for this proposal does not imply opposition to smaller changes to coding style, or to better enforcement of the current style.

                                                Update: MuseScore's coding style is now supported by Uncrustify. Autoformatting to other styles is demonstrated here.

                                                PROS
                                                - Nothing to do!
                                                - No need to rebase hundreds of pull requests
                                                - Preserve Git history and blame
                                                - Works with autoformatting tools like Uncrustify

                                                CONS
                                                - Not what programmers are used to
                                                - IDEs not setup to use this style by default

                                                Support
                                                - @Jojo-Schmitz, can I have more than one vote please? ;-). There are other code styles that may look better, but none is worth the effort and pain that comes with changing to it. I don't particularly love the current style, but it has its benefits and I got used to it eventually )and it didn't take too long). Everyone else should be able to get used to it too...
                                                - @mattmcclinch, I actually like this coding style, believe it or not. It was not what I was used to, but I became accustomed to it very quickly, and changing it now would actually decrease my productivity.
                                                - @mirabilos (first choice), I hate the current style but keep it anyway, changing is error-prone and makes merging back and forth very problematic
                                                - @marcsabatella, this is my vote. Independently of what my own personal preference would be, I see far more downside than upside to any change. FWIW, I was not familiar with this style at first and while I don't love the six space indents, I have come to actually prefer the brace style over other alternatives. Still, my personal preferences aren't the point. Soapbox: there are many different aspects of coding style that we as developers need to adapt to - OO versus procedural paradigms, interpreted vs compiled, syntax differences between compiled OO languges or even versions of a single language, actual use of multiple inheritance, accessor methods & pointers & references & and other language features, different UI frameworks, differences between Qt lists vs C++ vectors, iterators vs traditional loop structures, etc. Adapting to different paradigms, languages, versions, usages, frameworks, and so forth is part of being a successful developer, particularly in a team environment. And really, the skills needed to keep track of these sorts of details (and here I included indent and brace style) are not so different from the skills needed to keep track of what the code is actually doing and why, the sorts of skills needed to make sure you understand how your changes will affect other code, etc I have faith that any developer who has the skills needed to actually understand, maintain, and improve the code itself can adjust to different indent and brace styles as surely as they can handle the other aspects of coding style that are different from project to project.
                                                - @Howard-C

                                                Neutral
                                                - @shoogle, while I prefer K&R, consistency matters more, and other (less disruptive) proposals are more important to me than indentation style.

                                                Oppose
                                                - @dmitrio95, as the current style has certain practical disadvantages which make the code less convenient to work with. Most prominently, 6-space indents make code lines be too long to fit to the "comfortable" size limit of 80-100 characters. Also certain practical consequences seem to be shown in the relevant studies: in McConnel's "Code Complete" book refers to studies of a dependency of code readability on indentation size. According to the conclusions presented in the book, there is no real difference between 2- and 4-space indents in this regard, but 6-space indents showed worse performance for the ability of programmers to understand the code. I could try to find the references from the book and put it here.
                                                - @ypoissant2, I know I'm very late in this poll and decisions have already been taken, but I wanted to add my comment. I'm learning MuseScore internals by following the code, mainly in rendermidi and related classes, And one thing I observe, is the prominent use of the "continue" and "break" statements. Not using "continue" would force indentations to go too far off to the right in many situations because of the 6 space indents. However, the usage of continue and break obfuscates the function logic and make it hard to understand, at least for me. My conclusion is 6 spaces is a too wide indent and prevents proper logical formatting.

                                                4 space indentation with K&R braces

                                                We should switch to a more popular coding style, with one of the most popular styles being 4 space indentation with K&R-style braces.

                                                void myFunc(bool b)
                                                {
                                                    if (b) {
                                                        // do something
                                                        // ...
                                                    } else {
                                                        // do a different thing
                                                        // ...
                                                    }
                                                }

                                                Primarily affects C++ files, but could potentially include other formats too.

                                                PROS
                                                - Used by many projects, including Qt
                                                - More familiar to most developers, especially those new to MuseScore
                                                - Supported by IDEs (often the default!)

                                                CONS
                                                - Big change increases repository size
                                                - Spoils git blame (certainly on GitHub, possible workaround for offline git)

                                                Support
                                                - @shoogle
                                                - @igorkorsukov
                                                - @dmitrio95, but the caution should be taken to check how changing braces style works with --ignore-rev option of Git. Unlike whitespaces changes, changing braces style will change a number of lines, so it might be needed to do braces style change in a separate commit for --ignore-rev/--ingore-revs-file solution to work correctly.
                                                - @mirabilos, second choice

                                                Neutral
                                                - @Spire42, This is better than banner style, but I strongly prefer Allman style instead.

                                                Oppose
                                                - @Jojo-Schmitz, 4 spaces are fine by me, brace style is not. Although my opposing isn't really strong, I could certainly adjust and get used to it. If (and only if!) it can get done without screwing up git blame etc. And without needing to rebase some 250 open PRs!
                                                - @marcsabatella, I oppose change for the sake of change. Until someone proves there is a real benefit to offset the VERY real and enormous cost - or can demonstrate a proven method to negate the cost - any such proposal is DOA to me. And in any case, if that were to happen, this would not be my choice of what to change to.
                                                - @Howard-C, don't like putting the right brace and else on the same line.

                                                4 space indentation with Allman braces

                                                Another popular style is 4 space indentation with Allman-style braces.

                                                void myFunc(bool b)
                                                {
                                                    if (b)
                                                    {
                                                        // do something
                                                        // ...
                                                    }
                                                    else
                                                    {
                                                        // do a different thing
                                                        // ...
                                                    }
                                                }

                                                Primarily affects C++ files, but could potentially include other formats too.

                                                PROS
                                                - Used by many projects
                                                - More familiar to most developers, especially those new to MuseScore
                                                - Supported by IDEs

                                                CONS
                                                - Big change increases repository size
                                                - Spoils git blame (certainly on GitHub, possible workaround for offline git)

                                                Support
                                                - @Spire42

                                                Neutral
                                                - @shoogle, better than banner style, but I prefer K&R style above.
                                                - @igor.korsukov better than banner style, but I prefer K&R style above, because in K&R style there is a begin, a body, an end, and in Allman style there are as if two begins
                                                - @Howard-C

                                                Oppose
                                                - @Jojo-Schmitz, 4 spaces are fine by me, brace style is better than K&R and the one I used in a past life. Here too my opposing isn't really strong, I could certainly adjust and get used to it. If (and only if!) it can get done without screwing up git blame etc. And without needing to rebase some 250 open PRs!
                                                - @marcsabatella, I oppose change for the sake of change. Until someone proves there is a real benefit to offset the VERY real and enormous cost - or can demonstrate a proven method to negate the cost - any such proposal is DOA to me. But, that said, if it were somehow proven that there was a benefit to changing that was greater than the enormous cost, this is what I'd vote for as what to change to.
                                                - @mirabilos, strongly oppose, ugly brace style
                                                - @dmitrio95, for the brace style unnecessarily taking a lot of vertical space.

                                                6 space indentation with K&R braces

                                                This provides all the benefits of the familiar K&R-style braces with none of the drawbacks of changing indentation level. Implementing this proposal would result in a tiny change to braces at the end of functions and statements, but there would be no changes to any lines of actual code so tools like git blame would continue to work as expected.

                                                void myFunc(bool b)
                                                {
                                                      if (b) {
                                                            // do something
                                                            // ...
                                                      } else {
                                                            // do a different thing
                                                            // ...
                                                      }
                                                }

                                                Primarily affects C++ files, but could potentially include other formats too.

                                                PROS
                                                - Similar to what is used by other projects, including Qt
                                                - More familiar to most developers, especially those new to MuseScore
                                                - Supported by IDEs (close to the default!)
                                                - Works with auto-formatting tools like Uncrustify
                                                - Enables developers to use their preferred style via Git's smudge and clean filters
                                                - Doesn't affect git blame
                                                - Some people prefer 6 space indentation (more indentation makes levels easier to see, but 8 is too many)

                                                CONS
                                                - 4 spaces is more popular (but MuseScore already uses 6)
                                                - Some work rebasing PRs that make changes near ends of functions / statements

                                                Support
                                                - @shoogle

                                                Neutral
                                                - @marcsabatella, I'm still not seeing the point of putting so much effort into the idea of change, but I will say, if we have to change to something and wish to minimize the damage, this is clever. But I do have to laughingly agree with the assessment I saw on Telegram of this being the "worst of both worlds", at least when considered on its own merits. I dislike K&R braces, and I dislike 6 space tabs, but somehow the combination comes closest to what we have now among any of the proposals that anyone might see as an improvement.
                                                - @Jojo-Schmitz, but I am still not convinced about any need for a coding style change

                                                Oppose
                                                - @Howard-C, don't like putting the right brace and else on the same line.
                                                - @dmitrio95, as I mentioned above, 6-space indents are the more important issue than braces style.

                                                6 space indentation with Allman braces

                                                This provides all the benefits of the familiar Allman-style braces with almost none of the drawbacks of changing indentation level. Unlike K&R-style above, Allman style would require a small change to braces at the beginning of statements as well as at the end, but no other lines of code would change.

                                                void myFunc(bool b)
                                                {
                                                      if (b)
                                                      {
                                                            // do something
                                                            // ...
                                                      }
                                                      else
                                                      {
                                                            // do a different thing
                                                            // ...
                                                      }
                                                }

                                                Primarily affects C++ files, but could potentially include other formats too.

                                                PROS
                                                - Similar to what is used by many projects
                                                - More familiar to most developers, especially those new to MuseScore
                                                - Supported by IDEs
                                                - Works with auto-formatting tools like Uncrustify
                                                - Enables developers to use their preferred style via Git's smudge and clean filters
                                                - Some people prefer 6 space indentation (more indentation makes levels easier to see, but 8 is too many)

                                                CONS
                                                - 4 spaces is more popular (but MuseScore already uses 6)
                                                - Some work rebasing PRs that make changes near ends of functions / statements (a bit more work than for K&R)
                                                - Affects git blame (but not very much)

                                                Support

                                                Neutral
                                                - @shoogle, I prefer K&R
                                                - @marcsabatella, although I personally prefer Allman over K&R when writing code in the privacy of my own bedroom, the "K&R+6" proposal would destroy the git history by only half as much I guess, so there is that. Still, I could be OK with this more than most of the others. If it were up to a vote, I'd still pick "no change" in a heartbeat, but if it becomes clear that change is coming anyhow, and no one comes up with a really brilliant solution to allow 4 space tabs (which I do personally prefer, but not at the cost of adversely affecting git history), I will side with whichever 6-space proposal seems more likely to defeat any coalition of 4-space supporters. Just putting that out there :-)
                                                - @Howard-C

                                                Oppose
                                                - @dmitrio95, as I mentioned above, 6-space indents are the more important issue than braces style.
                                                - @Jojo-Schmitz, that 'combining the worse of both worlds" was me, regardless that this style (except for using Tabs instead of spaces) was the style I used prior to MuseScore. It does affect all block starts in `git blame, which is bad and doesn't help with the number of spaces.

                                                Qt Coding Style

                                                Why stop with indentation and braces? Let's adopt all of the style recommendations made by the Qt Project.

                                                PROS
                                                - Tried and tested rules
                                                - Consistency with Qt

                                                CONS
                                                - Big change to current style
                                                - Spoils history, git blame, etc.
                                                - Arguably bool* ptr; is better than bool *ptr; because ptr is not a bool, it is a pointer to a bool.

                                                Support
                                                - @shoogle
                                                - @mirabilos, third choice (though there’s not much difference to K&R AFAICT?)
                                                - @igor.korsukov Absolutely yes. The point is not in the Qt, but in having a source of truth and a reference. Instead of Qt, for example, we can to accept Google C++ Style Guide, which also explains why so, and not otherwise.

                                                Neutral
                                                - @dmitrio95, although I don't see a reason to adopt references and pointers declaration style from Qt.

                                                Oppose
                                                - @marcsabatella, I oppose change for the sake of change. Until someone proves there is a real benefit to offset the VERY real and enormous cost - or can demonstrate a proven method to negate the cost - any such proposal is DOA to me. If we have to change, I strongly encourage keeping the changes as minimal as possible in order to still receive the alleged benefit. Change to the pointer declaration in particular seems even more gratuitous than changes to indent or brace style.
                                                - @Howard-C, I don't think it's necessary to adapt to a specific coding style just because we use a gui framework that uses it. For example, I don't like the idea of changing pointer declaration to T *x at all.
                                                - @Jojo-Schmitz, esp. that pointer type thing

                                                One list item per line, alphabetical

                                                When defining a list or similar structure that contains (or may eventually contain) more than 2 items, write each item on a separate line. Items should be ordered alphabetically unless a different ordering makes more sense for the given situation (e.g. chronological, size-order, grouped by meaning, etc).

                                                Applies to all file formats. Example in CMake:

                                                # Do this
                                                add_files(
                                                    file1.h
                                                    file2.h
                                                    ...
                                                    )
                                                 
                                                # Not this
                                                add_files(file2.h file1.h ...)

                                                For a real-life example of where this rule would make a difference, see this list in icon.h which is supposed to correspond 1 to 1 with the list in icon.cpp. See also the mess that is mscore/CMakeLists.txt.

                                                PROS
                                                - Less sideways scrolling
                                                - Items aligned vertically
                                                - Diffs are smaller and easier to read
                                                - Merge conflicts are easier to resolve

                                                CONS
                                                - More vertical scrolling
                                                - Larger file size (though smaller changes)

                                                Support
                                                - @shoogle

                                                Neutral
                                                - @marcsabatella, doesn't affect as much code as the other changes so I'm less worried about the cost. I might still think short lists are fine to put on line, though, at least sometimes. So I'd prefer we be flexible on this.
                                                - @mirabilos
                                                - @Howard-C

                                                Oppose
                                                - @igor.korsukov (I am for adding to the column, but not alphabetically, but grouping by meaning (and for сmake need to do a restructuring in order to group files by folder structure and use file (GLOB ...) )
                                                - @Jojo-Schmitz

                                                C++ proposals

                                                The following proposals only affect C++ files (*.cpp and *.h) and the few pure C (*.c) files in the repository.

                                                Remove function name comments

                                                These don't provide any information that is not available in the function definition.

                                                //--------------------------------------
                                                //   MyClass::myFunc
                                                //--------------------------------------

                                                Note that documentation-style comments are useful and should be kept, but there is no need to include the function name in such comments.

                                                PROS
                                                - Save writing the same thing twice
                                                - No opportunity for comment to get out-of-sync with code
                                                - Nobody else does it

                                                CONS
                                                - Slightly harder to see where functions begin and end

                                                Support
                                                - @shoogle
                                                - @igor.korsukov
                                                - @mirabilos

                                                Neutral
                                                - @Jojo-Schmitz
                                                - @dmitrio95, these comments have a lot of information which would be useful to be collected by Doxygen into an auto-generated documentation to the code. The current structure of these comments makes it easy to convert them to Doxygen-style docstrings (by starting the comment lines with /// instead of //), but moving such documentation comments to header files should be fine as well. Apart from documentation purposes, I see no reason to preserve these comments.
                                                - @marcsabatella, I am not crazy about the way these comments are formatted, but I do like the visual separation when browsing the code; still, if we're to spend time making changes, I'd rather see something really constructive, like actually adding meaningful comments to each function

                                                Oppose
                                                - @Howard-C, the border lines help me a lot when browsing through code. As for the duplicated names themselves, I think I don't have much feelings about them, so it's OK to remove them. But OK doesn't necessarily mean we should remove. Even if I directly look at the function names the majority of time, I sometimes still look at the comments to search for function names. They're useful and helpful, that's all for me. Don't know why we have to change this.

                                                Documentation comments

                                                Where appropriate, functions should be preceded by a comment that explains what the function does and how to use it (i.e. a 'docstring').

                                                /// Draws the element so that it fills as much of the given QRect
                                                /// as possible without changing the elements's aspect ratio.
                                                 
                                                void Element::paint(QPainter& p, QRect& r)
                                                      {
                                                      // code
                                                      }

                                                Notice the use of three slashes (///) to expose the docstring to Doxygen.

                                                There is no need for the docstring comment to include the name of the function or a special border (think //--------, etc.). If such things are included then they should be on a line with two slashes (//) to avoid them being exposed to Doxygen.

                                                PROS
                                                - Makes functions easier to understand and use
                                                - Makes it easy to see where one function ends and the next begins, which could be important if the function name comments are removed as proposed above.

                                                CONS
                                                - More work in writing and maintaining comments.

                                                Support
                                                - @shoogle
                                                - @dmitrio95, another options which could be considered are using another style of comments (/** comment */) and moving documentation comments to header files. Any of the options (including three-slashes comments listed here) would be fine for me.

                                                Neutral

                                                Oppose
                                                - @Howard-C, if we add explanatory comments to all classes/functions then it's all right. But if not, this proposal suggests those who don't have explanatory comment won't have border lines and name comment as well, which I oppose. Border lines are very helpful to me as I've said above, I don't see why they're considered useless.

                                                CMake proposals

                                                The following proposals only affect CMake build files, i.e. CMakeLists.txt and *.cmake.

                                                Empty closing statements in CMake files

                                                Do this:

                                                if (CONDITION)
                                                    # do something
                                                endif()

                                                rather than:

                                                if (CONDITION)
                                                    # do something
                                                endif(CONDITION)

                                                Both are valid syntax that will not result in errors or warnings when you run CMake. Warnings occur if you try to specify a closing condition that doesn't match the opening condition, but an empty closing condition is fine and is recommended by many style guides, including KDE's guide.

                                                PROS
                                                - Less work to read, write & maintain
                                                - Like every other language!

                                                Support
                                                - @shoogle

                                                Neutral
                                                - @Howard-C
                                                - @igor.korsukov
                                                - @Jojo-Schmitz
                                                - @mirabilos, keeping them sometimes helps in better overview, but we don’t do it in C++ either, so no biggie
                                                - @marcsabatella, cmake is still a foreign language to me, as is virtually everything about the build process, so I defer to others

                                                Oppose
                                                - @dmitrio95, with large blocks of code this syntax provides a natural way to show which exactly conditional block ends on this line. It might be a better choice not to write such block in the first place, but I would suggest not adding any rule on that to coding style recommendations and allowing to choose the endif() statement format depending on a particular context.

                                                Packaging for different operating systems

                                                Packaging for Linux & BSD systems (maintainer wishlist)

                                                Background - the Packaging Problem

                                                Many Linux and BSD distributions place strict (and often contradictory) requirements on software intended for that system. These requirements can be technical, legal or moral in nature, and meeting them can be a challenging task. Traditionally, this job is left to each system's package maintainer who applies patches to the MuseScore code "downstream" to meet the requirements. As the "upstream" MuseScore code changes the patches can stop working and so they must be updated each time a new version of MuseScore is released. For this reason, Linux and BSD releases of MuseScore are often available much later than the Windows or Mac OS versions.

                                                The Solution

                                                To make life easier for the package maintainers long-term, and to make new MuseScore versions available sooner on Linux and BSD, all packaging tasks should be performed upstream (where possible). Ideally, package maintainers should not have any downstream patches. Anything that has previously been implemented via a patch should be sent upstream. Where necessary, suitable IF statements, Makefile variables and CMake options should be used to ensure that changes only affect the relevant distributions.

                                                Linux & BSD packaging tasks

                                                Please edit these lists wiki-style to keep them up-to-date. Anyone is welcome to attempt to implement the missing features via pull requests to the MuseScore:master branch on Github.

                                                Maintainer Wishlist

                                                Missing packaging-related features, packaging bugs or anything that maintainers currently have to provide downstream (e.g. through patches). Please state which distributions are affected.

                                                1. Updating the machine-readable copyright file (Debian, Ubuntu & related distros)
                                                2. Updating the build-depends and related lists (Debian, Ubuntu & related distros)
                                                3. Keeping man page ($ man mscore) up-to-date with Command line options (Linux & BSD)
                                                4. Automated translations of desktop file and man pages (Linux & BSD)
                                                5. Add MSCX, MSCZ and MusicXML (XML & MXL) to the xdg/shared-mime-info database (Linux & BSD - this would enable systems to recognise MuseScore files even when MuseScore is not installed).

                                                Solved packaging issues

                                                Move items from the wishlist to here when they get implemented in the MuseScore:master branch on Github.

                                                1. .desktop file (sets icon and declares mimetypes): #16275: .desktop needs work
                                                2. MuseScore app icon SVG
                                                3. Add MSCX, MSCZ, XML and MXL (MusicXML) to local MIME database
                                                4. MuseScore file icon and MusicXML file icon SVGs
                                                5. #59196: App icon doesn't scale on Ubuntu (and other Linux?)
                                                6. #57736: make mp3 support optional - required for packaging on many Linux because MP3 is non-free
                                                7. Solved conflicts when installing multiple versions of mscore in $PATH (you must override the $SUFFIX variable in Makefile).
                                                8. add an uninstall option to the make file
                                                9. #76331: Linux Makefile "uninstall" target doesn't remove directories

                                                UX Design

                                                User Experience Design is about much more than just making an application look pretty! You have to think about how the different controls (buttons, widgets and menus) work together to allow the user to accomplish the task at hand, and how these controls may be presented differently on a range of platforms and devices, and in different languages or regional variations. You also have to think about how the controls are to be made accessible to users who are blind or partially sighted, or otherwise have difficulty using traditional input devices like the mouse or keyboard.

                                                IMPORTANT:

                                                If you want to make changes to the look and feel of the application then it is vitally important that you:

                                                1. Read and fully understand the information on these pages.
                                                2. Get feedback from both the user community and the developer community on your design concepts.

                                                You should do these things BEFORE you put any serious effort into realizing your design in the code!

                                                Proposing a change to design

                                                  Design is a hot topic. Many users and developers have strong feelings about design, so it is important that the community is given the opportunity to comment on future changes before they are made. People deeply experienced with MuseScore may lack perspective on how things appear to those starting afresh or transitioning from a competing commercial product.

                                                  Adjust expectation

                                                  Musescore the desktop software is a free and open source product (wikipedia) developed and supported by non paid volunteers and managed by Muse Group subsidiary empolyees, source. Open source is not democracy, see discussion, and the product is fully owned by (through subsidiary) Muse Group. All users that use the forum on musescore.org are not necessary the real decision makers, unless otherwise proclaimed. Please do not feel it is unfair if your elaborated proposal is rejected: you are free to fork the open source repo, or write a plugin.

                                                  Existing reference and graphics

                                                  Dig into Github Wiki and .org Developers' Handbook listed on development overview for specifications and design principles.
                                                  github repo /share/icons (Musescore 4)
                                                  github repo /share/themes (colors hex, Musescore 4)
                                                  Branding (Graphics in Dev Handbook, editable by any log-in user, no Musescore 4 yet)
                                                  Logos and Graphics (Graphics on .org, no Musescore 4 yet)
                                                  MuseScore on Wikidata.org

                                                  Search for similar or duplicate ideas

                                                  • Use the search function as shown on the screenshot above, and
                                                  • Use this google search syntax site:musescore.org your topic, eg site:musescore.org sight reading trainer (source1, source2 )

                                                  Getting feedback

                                                  If you want to chat and exchange ideas, use a relevant forum.

                                                  If you want to propose a change to MuseScore's design then you should make a post in the Development and Technology Preview Forum. Your post should include:

                                                  1. A description of your idea.
                                                  2. Diagrams or a mock-up of any visual aspects of your design.
                                                  3. An outline of how it addresses each of the Factors Influencing Design (see below), or an explanation of why you think a particular factor doesn't apply in this case.

                                                  IMPORTANT: Chat with developers and gain concensus before you start coding to save yourself from having to make significant changes later on. It has happened that finished projects were wasted not getting pull or rebase.

                                                  Factors influencing design

                                                  If you want to make changes to MuseScore's design then you need to think about:

                                                  • Consistency with existing designs (or why you think a new approach is needed)
                                                  • Ease of adoption for new and existing users
                                                  • Ability to perform common tasks quickly (basic features)
                                                  • Flexibility to perform less common tasks (advanced features)
                                                  • Localisation (translations and regional variants)
                                                  • Portability (across devices and platforms)
                                                  • Scalability (across screen sizes and pixel densities)
                                                  • Accessibility (for people who are blind, colorblind, partially sighted, or motor impaired)

                                                  The above factors do not necessarily apply in all cases. For example, if you want to change MuseScore's icons then this should have very little impact on accessibility or localisation. However, if you want to rearrange where the buttons that use those icons will appear on the screen then this would affect accessibility, and if you want to display text next to those icons then the text needs to be translatable.

                                                  Accessibility First!

                                                  Accessibility is often treated as an afterthought: something that can be added later once the visual design has been finalised. This is wrong. Prioritising the visual aspect of design often leads to a bad design that is difficult to fix without tearing everything up and starting all over again. If your design process starts with a picture then you will never see the alternatives.

                                                  If you focus on delivering accessibility first, then you will get most of the other factors "for free". See this example of a proposal to redesign MuseScore's Mixer to see how prioritising accessibility leads to a better design for all users, not just those with accessibility needs.

                                                  Design reviews and responses

                                                  This page lists external reviews of MuseScore's design and how we have addressed, or plan to address, the points raised in the review.

                                                  Note to editors: Create a new child page for each external review and it will be listed below automatically. You may want to use an existing page as a template, which you can do by clicking edit on the existing page and copying the markdown code into the new page. Don't forget to update or delete anything that refers to the old page.

                                                  Tantacrul - "Music Software & Interface Design: MuseScore"

                                                    Original review

                                                    YouTube video:

                                                    Music Software & Interface Design: MuseScore

                                                    Points raised and our responses

                                                    MJS: Marc Sabatella

                                                    6:46 - Font dropdown colors

                                                    @Isaac Weiss - Regardless of the fate of the turquoise, getting rid of the red and black TT (TrueType?) icon next to every font in the list should solve the problem of the "ghastly" red+black+turquoise combination. See #288879: Remove "TT" icons from font dropdown.

                                                    6:54 and 11:23 - Depressed button color

                                                    @Isaac Weiss - Regression from MuseScore 2. See #288881: Better color for pressed buttons.

                                                    7:01 - Icons

                                                    MJS - Mostly the complaints seem to be about the file icons, maybe we could consider just replacing those?

                                                    tinman - The main complaint was that the icons don't seem consistent, with varying sizes and no clear grid system. The thing is, though, that all of the icons Tantacrul mentions were taken from the same icon set — the Material icon set, though an older version of it that was still licensed CC BY-SA (the newer version's license is incompatible with GPLv2). The icons are here, on the Icons page: https://www.figma.com/file/d4PsbNZ8UNB8wIYGqmuApoLv/MuseScore?node-id=1… . Feel free to duplicate the file and try to make the icons fit the grid better.

                                                    tinman - I added filled variants of the open and new file icons. There's also a new upload to cloud icon, from the Material design set. That still doesn't fix the inconsistency in grid size or in fill with e.g. clipboard icons, but that all comes from the original set.

                                                    10:28 - Color

                                                    Blue and similar colors are used to mean different things in different parts of the interface:

                                                    • Selections in Voice 1 are blue (we won't change this, but we could use a different shade of blue)
                                                    • Non-printable markings are light blue
                                                    • Styled Inspector properties are turquoise (disscussion moved here)

                                                    Some colors don't work well in combination:

                                                    • Depressed toolbar buttons have blue icons on a dark grey background (raised more than once, see above)

                                                    MJS - these colors were actually changed in response to this. I have insight into whether the issue "solved", but it's worth another look.

                                                    11:37 - "Preponderance" of icons and buttons in Text Inspector

                                                    More or less addressed in PR #4559.

                                                    13:04 - MuseScore logo "wonky" (asymmetrical)

                                                    Addressed in PR #3269.

                                                    17:35 - Toggle visibility improvements

                                                    MJS - Not sure the wisdom of menus with toggles, but making better use of "Nothing select" Inspector is fine by me. Also right-click menu with nothing selected.

                                                    18:32 - Documents side-by-side

                                                    MJS - Disable when only one score is possible, but also consider showing File / Open in that case.
                                                    lasconic: It's useful with a single long score though. You can see the start and the end of the same score in the same screen...

                                                    tinman - I think the bigger problem here was with it being unclear what the "X" does. When the same document is open in two panes, closing one of the panes should keep the document open in the other pane. There should be no potential data loss.

                                                    19:11 - Instrument change

                                                    MJS - This is one of the few elements that still requires right-click menu. Would love to see this incorporated into Inspector. Also section break, what else? As for changing clef, not necessarily always wanted.

                                                    @RobFog - Name change addressed by Marc Sabatella in PR #4958. Also see #88861: Option for editing abbreviated staff names in instrument changes.

                                                    @Isaac Weiss - even if the whole dialog can't be put in the Inspector, at the very least, a button to launch it is a must. See #289006: Expose "Select Instrument" in Inspector for Instrument Change text. Addressed in PR #5010.

                                                    21:31 - File / Parts

                                                    MJS - Yes, it's a clumsy dialog for sure. Note: the button label is no longer "New All" :-)

                                                    23:26 - Tours

                                                    MJS - Not so sure about the "eye" - if you don't actually pop something up, most people won't notice it's there. But sure, the mechanism used to show tours could be improved further.

                                                    27:02 - Select note on delete slur or other marking

                                                    MJS - In general, a potentially good idea on several fronts to leave something selected after deleting something - good to keep keyboard navigation active. Do need to be careful though as sometimes this is unexpected - hitting Delete twice in a row would then delete the newly selected element.

                                                    @dmitrio95: added #287141: No element is selected after deleting slur or other marking to track this.

                                                    MJS - we've actually caught almost all cases at this point. And for the few cases where an action does result in loss of selection (measure join/split?), Alt+Left/Right now remembers the previous selection and continues navigation from there. So, a pretty big improvement on this front.

                                                    28:13 - Copy/paste dynamic/hairpin combinations

                                                    MJS - Right now we can copy lines using the "clone" facility used for custom palettes, but no one knows this, and it's not as convenient as what people would reasonably expect.

                                                    @dmitrio95: addressed in PR #4831

                                                    28:26 - Adjust multiple hairpins

                                                    MJS - Nice idea, not sure how that would work if they don't start out aligned?

                                                    28:53 - Copy/paste with overwriting of markings

                                                    MJS - See #45361: copy/paste and "R" do not delete slurs or lines in target measures

                                                    29:09 - Spacing adjustments

                                                    MJS - Direct dragging as a way of adjusting measure width or other spacing is achievable, in principle. Although for the record, I like having the possibility of more precise settings too.

                                                    @dmitrio95 - see https://github.com/musescore/MuseScore/pull/4930 for the patch on dragging notes.

                                                    MJS - after a couple of back-and-forths on this, I think it's good now.

                                                    29:41 - Change duration multiple

                                                    MJS - Would be easy enough to shorten multiple notes, not clear what should happen for lengthen, are we talking about lengthening the passage as well (eg, half-time/double-time)? Like requested in #278980: Augmentation/Diminution features?

                                                    MJS - This is implemented now,. but only for list selections. I wonder if there is a reason not to allow it for range?

                                                    29:51 - Note input on duration select

                                                    MJS - See #286360: Enter note entry mode when a note pad button is clicked. Not at all obvious this is really such an improvement - which measure do we start note input in? Or should it only be viable for input by click?

                                                    30:03 - Playback selection only

                                                    MJS - This is a reasonably common request. I could imagine not wanting the act of selection to change how playback works, but a special command like Shift+space to just play the selection could make sense.

                                                    @dmitrio95: a possible implementation: https://github.com/musescore/MuseScore/pull/4933

                                                    MJS - This was meregd and then backed out because too many people did not like the change, but I'd still love to see this via a separate command (e.g., Shift+Space).

                                                    30:27 - Play whole chord on navigate

                                                    MJS - Already implemented in 3.0.5, via #283946: Play whole chord when iterating over notes with Left-Right arrows, nice job Anatoly!

                                                    Plugin development

                                                    Plugins for 1.x

                                                    Introduction

                                                    This documentation applies to plugins for 1.x only!

                                                    
                                                    

                                                    Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                    ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                    
                                                    

                                                    Click here for Documentation for 3.x

                                                    
                                                    
                                                    

                                                    Plugins allow you to extend MuseScore beyond its built-in features using JavaScript. MuseScore provides a minimal API with access to a subset of MuseScore-specific objects and the Qt API .

                                                    Existing plugins can be found in the plugin directory . To discuss plugin development, announce your own plugin, or discuss the plugin API, you can join the dedicated forum .

                                                    JavaScript

                                                    MuseScore plugins are written in the language JavaScript 1.5 (ECMA-262) using the QtScript engine. If you are familiar with JavaScript from web development you are in good shape, but its important to note that web browsers add specific extensions like DOM and some other functions that are not available to MuseScore plugins.

                                                    Resources

                                                    • JavaScript 1.5 Guide - A thorough overview of the language.
                                                    • API documentation for the standard functions and objects - This documents some functions available only in JavaScript 1.6, which MuseScore does not support; they are marked as such.
                                                    • Quick reference - a provided list of objects and functions.
                                                      • Qt bindings

                                                        Qt is the C++ GUI toolkit and library used by MuseScore. Using the Qt Script Generator , MuseScore provides JavaScript bindings to most of the Qt API. This allows you to create widgets and windows, use advanced XML parsing methods, browse the web, open a TCP port and much more.

                                                        Currently there is no reference of the Qt methods accessible through Javascript in MuseScore. Basically, the majority of the objects and functions from QtCore, QtGui, QtUiTools, QtNetwork and QtXml modules should be available. The C documentation and tutorials can also be used. Usually when developing a MuseScore Plugin, you can refer to the Qt Project C++ documentation. However, differences between the nature of C++ and JavaScript mean that the JavaScript docs may differ slightly. This might happen when:

                                                        • C++ features are being used that JavaScript doesn't support.
                                                          • templates
                                                          • Function overriding. If you see a set of functions in the Qt C++ docs with the same name, but different argument types then function overloading is being used and the Qt Script Generator might have chosen to support only one of them (generally the most complete function). Note that the Qt bindings should support different functions with the same name if they vary in the number of arguments.
                                                          • Classes that are redundant with built-in JavaScript types. Just use the JavaScript types instead. Examples include:
                                                            • QList, use Array instead
                                                            • QString, use String instead
                                                            • QVariant, use Object instead

                                                          Access MuseScore objects

                                                          If you are writing a MuseScore plugin, there is a good chance you mainly want to manipulate and query MuseScore objects. Some objects are available to the plugin framework. The latest API is documented in other pages of this handbook. The README.scripts (1.1 version) is also available.

                                                          Debugging

                                                          MuseScore is bundled with a plugin debugger. You can activate it from the Help menu. The plugin debugger enables step-by-step debugging and displays "print" results in the Debug output tab. It also includes a "command line" or Console tab where you can evaluate one line of Javascript code at a time.

                                                          If you want to test a snippet of Javascript code, you can install the Plugin Console plugin.

                                                          Legal

                                                          If you use the Qt Bindings, it seems you are legally obligated to release your script under the GPL v2 or v3 license, under the terms of Qt 4.6's Open Source licensing .

                                                          This documentation is based on the Amarok Scripting How to . Amarok is using the same technology to provide scripting of the music player

                                                      MuseScore 1.x Plugin File Structure

                                                      Plugin file

                                                      To be recognized as a plugin by MuseScore, a file must:

                                                      1. have a file name ending with the ".js" extension;
                                                      2. be placed in the plugins folder. A plugin with many files should use a sub-folder within the plugins folder to avoid cluttering the main plugin directory and to simplify uninstallation.
                                                        • The Linux plugin directories are usually located at $install-path$/museScore/plugins (system-wide) and ~/.local/share/data/MusE/MuseScore/plugins (personal).
                                                        • On Windows, it is usually located at <install-path>\MuseScore\plugins (system-wide) and in %LOCALAPPDATA%\MusE\MuseScore\plugins on Vista and Seven or C:\Documents and Settings\USERNAME\Local Settings\Application Data\MusE\MuseScore\plugins (personal, adjusted to your language version) on XP.
                                                        • On Mac, it's located at /Applications/MuseScore.app/Contents/Resources/plugins or ~/Library/Application Support/MusE/MuseScore/plugins
                                                      3. the filename needs to be unique (accross the different directories, the personal ones are searched first and 'shadow' later plugins with the same filename)

                                                      The plugin file is re-read on every execution, so during plugin development you do not need to restart MuseScore after every edit in the plugin file.

                                                      Plugin file structure

                                                      The JavaScript source code of a MuseScore plugin has to contain at least three members:

                                                      • mscorePlugin variable: defines the plugin entry points and the expected interface level. It is an associative array with the following 6 elements:
                                                        • majorVersion integer: the API major version the plugin is made for (optional, currently 1)
                                                        • minorVersion integer: the API minor version the plugin is made for (optional, currently 1)
                                                        • menu string: the MuseScore menu item where to place the plugin command; this string has the format 'Plugins.<plugin name>', where <plugin name> is the command name which will appear in the MuseScore menu.
                                                        • init identifier: the name of the plugin function to call when the plugin is initially loaded. Usually this function is also called init().
                                                        • run identifier: the name of the plugin function to call when the plugin menu item is selected. Usually this function is also called run().
                                                        • onClose identifier: the name of the plugin function to call when the plugin is unloaded. Usually this function is called close().
                                                      • <init>() function: called by MuseScore when the plugin is initially loaded (currently when the programme starts). <init> is a place-holder: the actual function name is declared in the mscorePlugin variable. Mandatory.
                                                      • <run>() function: called by MuseScore when the plugin is selected in the "Plugins" menu. This is the actual starting point of the plugin. <run> is a place-holder: the actual function name is declared in the mscorePlugin variable. Mandatory.
                                                      • <close>() function: called by MuseScore when the plugin is closed down (unloaded). <close> is a place-holder: the actual function name is declared in the mscorePlugin variable. Optional.

                                                      This is an example of a "no-operation" but complete plugin:

                                                      function init() {};
                                                      function run() {};
                                                      function close() {};
                                                       
                                                      var mscorePlugin = 
                                                      {
                                                         majorVersion:  1,
                                                         minorVersion:  1,
                                                         menu: 'Plugins.test',
                                                         init: init,
                                                         run: run,
                                                         onClose: close
                                                      };
                                                       
                                                      mscorePlugin;

                                                      Chord Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a constituent of a voice and is made of notes (opposed to Rest, which is silent): voices are made of chords and staves are made of voices. A Chord may contain one or more Notes; all the Notes of a Chord start and end at the same time.

                                                      A new Chord can be created with:
                                                        chord = new Chord();
                                                      or
                                                        chord = new Chord(score);
                                                      where score is a Score Object .

                                                      The Chord existing at a given time of a given voice of a given staff of a score can be obtained by moving a Cursor to the needed staff / voice / time and using:

                                                         if ( cursor.isChord() )
                                                            chord = cursor.chord();

                                                      See also:

                                                      Cursor Object , Harmony Object , Note Object , Rest Object , Score Object .

                                                      Properties

                                                      Name Type Description
                                                      noStem boolean whether the chord has a stem or not. The chord needs to be retrieved from a cursor first
                                                      notes integer number of notes in the chord (read-only)
                                                      tickLen integer length of the notes in the chord (all notes of a chord have the same length); expressed in conventional units (see Tick Length values ).
                                                      type integer type of note(s) (read-only):
                                                        0: normal
                                                        1: acciaccatura
                                                        2: appoggiatura
                                                        3: grace 1/4
                                                        4: grace1/16
                                                        5: grace 1/32

                                                      Methods

                                                      addHarmony(Harmony harmony)

                                                      Add the Harmony harmony to the chord.

                                                      addNote(Note note)

                                                      Add Note note to the chord.

                                                      Note note(integer index)

                                                      Return Note at index index.

                                                      removeNote(integer index)

                                                      Remove from chord the index-th Note.

                                                      Note topNote()

                                                      Return topmost Note of chord (Note at index notes - 1).

                                                      Cursor Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Cursors allows navigation in an open score and allows access to its elements. A cursor exists purely within the plugin which creates it and has no relationship to the 'blue cursor' visible in the MuseScore GUI. A cursor can access only the Score Object for which it is initially created.

                                                      A new Cursor can be created with:
                                                        cursor = new Cursor(score);
                                                      or
                                                        cursor = new Cursor(score, expandRepeat);
                                                      where:

                                                      • score is an existing Score Object which the cursor will be able to browse;
                                                      • expandRepeat is a bool value: if true the cursor will obey score repetitions and voltas.

                                                      After the cursor is created, it should be rewind()-ed.

                                                      See also:

                                                      Chord Object , Measure Object , Rest Object , Score Object , Text Object

                                                      Properties

                                                      Name Type Description
                                                      pageNumber integer contains the score page the cursor currently is in (read-only).
                                                      staff integer contains the staff the cursor is browsing; staves are numbered from top to bottom, starting with 0; the number of staves of a score can be obtained with score.staves. Can be set to access a different staff.
                                                      voice integer contains the voice (within the current staff) the cursor is currently browsing; voices are numbered from top to bottom, from 0 to 3. Can be set to access a different voice of the current staff.

                                                      Methods

                                                      add(Chord chord)

                                                      Adds the Chord chord at the current cursor position (replacing what is currently there).
                                                      Moves the cursor to the next Chord/Rest of the current voice of the current staff.

                                                      add(Rest rest)

                                                      Adds the Rest rest at the current cursor position (replacing what is currently there).
                                                      Moves the cursor to the next Chord/Rest of the current voice of the current staff.

                                                      Chord chord()

                                                      Returns the Chord at the current cursor position, if any. Care should be taken to ensure the cursor is currently pointing at a chord, for instance by using the method isChord().

                                                      bool eos()

                                                      Returns true if the cursor is currently at end of the current voice/staff of the score.

                                                      goToSelectionStart()

                                                      Positions the cursor at the chord or rest at the beginning of the selection, voice will be 0 and staff will be set to the first staff in the selection. If you want something different, you need to set them after the goTo. If no selection exists in that score, the cursor will be positioned at the end of score, i.e. cursor.eos() would return true.
                                                      Note: a single 'blue' note or rest is not considered a selection; only extended selections ('blue rectangles') are taken into account.

                                                      goToSelectionEnd()

                                                      Positions the cursor immediately after the last chord or rest at the end of selection, voice will be 0 and staff will be set to the next staff after the selection (even if that doesn't exist). If you want something different, you need to set them after the goTo. If no selection exists in that score, the cursor will be positioned at the end of score, i.e. cursor.eos() would return true.
                                                      Note: a single 'blue' note or rest is not considered a selection; only extended selections ('blue rectangles') are taken into account.

                                                      bool isChord()

                                                      Returns true if the cursor points to a Chord.

                                                      isRest()

                                                      Returns true if the cursor points to a Rest.

                                                      Measure measure()

                                                      Returns the Measure at the current position.

                                                      next()

                                                      Moves the cursor to the next Chord/Rest of the current voice of the current staff.

                                                      nextMeasure()

                                                      Moves the cursor to the first Chord/Rest of the next Measure

                                                      QPointF pos()

                                                      Returns the x,y position (in pixels) of current element in the page.

                                                      putStaffText(Text text)

                                                      Adds the Text text as staff text at the cursor position. text shall be created previously.

                                                      Rest rest()

                                                      Returns the Rest at the current cursor position, if any. Care should be taken to ensure the cursor is currently pointing at a rest, for instance by using the method isRest().

                                                      rewind()

                                                      Positions the cursor at the beginning of the set staff / voice. After setting the staff and/or voice properties, the actual cursor position is undetermined until this method is called.

                                                      integer tick()

                                                      Returns the tick of the current position (in internal units, see Tick Length values ).

                                                      double time()

                                                      Returns the time of the current position in milliseconds.

                                                      Harmony Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a type of chord.

                                                      A new Harmony can be created with:
                                                        harmony = new Harmony(); or
                                                        harmony = new Harmony(curScore);.

                                                      Once created and set, a Harmony can be attached to a Chord or to a Rest with the Chord.addHarmony(harmony) or with the Rest.addHarmony(harmony) methods respectively.

                                                      See also:

                                                      Chord Object , Rest Object .

                                                      Properties

                                                      Name Type Description
                                                      base integer Tonal Pitch Class enum of the chord base
                                                      id integer the chord id, as in styles/chords.xml
                                                      root integer Tonal Pitch Class enum of the chord root.

                                                      Methods

                                                      None.

                                                      Measure Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Allows access to some info about a single measure of a score.

                                                      A new Measure can be created with:
                                                        measure = new Measure();
                                                      but it is probably more common to obtain a Measure object through a Cursor:
                                                        measure = myCursor.measure();

                                                      See also:

                                                      Cursor Object .

                                                      Properties

                                                      Name Type Description
                                                      lineBreak bool if true, break the system after this measure
                                                      pageNumber integer the number of the page where this measure is drawn (read-only).

                                                      Methods

                                                      QRectF boundingRect()

                                                      The bounding box of this measure (in pixels).

                                                      QPointF pos()

                                                      The position in the page of this measure (in pixels).

                                                      Note Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a single note. Notes belong to Chord Object objects.

                                                      A new Note can be created with:
                                                        note = new Note();
                                                      or
                                                        note = new Note(score);
                                                      where score is a Score Object object.

                                                      Notes belonging to a given Chord can be accessed with the Chord.note(index) and Chord.topNote() methods of the Chord object.

                                                      See also:

                                                      Chord Object , Score Object .

                                                      Properties

                                                      Name Type Description
                                                      boundingRect rect the bounding rectangle of the note relative to ???; in raster units (read-only).
                                                      color QColor the colour of the note head.
                                                      name string the name of the note as a string (read-only).
                                                      noteHead integer the note head group (see table below).
                                                      pitch integer the MIDI pitch of the note (in the range 0-127).
                                                      pos pos the position of the note relative to the page; in raster unit (read-only).
                                                      tied integer 0: not tied
                                                      1: tied to next note
                                                      2: tied to previous note
                                                      3: tied to both previous and next note.
                                                      tpc integer the Tonal Pitch Class enum of the note.
                                                      tuning integer the tuning adjustment of the note, in +/-cent with respect to default tuning.
                                                      visible bool whether the note is visible or not.
                                                      userAccidental integer the user-added accidental (see table below), if any; only affected by accidentals which do not change the MIDI pitch, like courtesy accidentals or micro-interval accidentals; if a note only has an accidental which can be deducted from the tpc property, returns 0.
                                                      velocity integer the MIDI velocity (loudness) of the note (in the range 0-127).

                                                      Methods

                                                      None.

                                                      Addendum 1: Codes for accidentals

                                                      These are the values returned by the userAccidental property.

                                                      none 0
                                                      # 1 mirrored-flat-slash 10 flat arrow up 19
                                                      b 2 flat-flat-slash 11 flat arrow down 20
                                                      ## 3 sharp-slash 12 flat arrow both 21
                                                      bb 4 sharp-slash2 13 natural arrow up 22
                                                      natural 5 sharp-slash3 14 natural arrow down 23
                                                      flat-slash 6 sharp-slash4 15 natural arrow both 24
                                                      flat-slash2 7 sharp arrow up 16 sori 25
                                                      mirrored-flat2 8 sharp arrow down 17 koron 26
                                                      mirrored-flat 9 sharp arrow both 18

                                                      Addendum 2: Codes for note head

                                                      These are the values used when reading from or writing to the noteHead property.

                                                      0 normal 7 do
                                                      1 cross 8 re
                                                      2 diamond 9 fa
                                                      3 triangle 10 la
                                                      4 mi 11 ti
                                                      5 slash 12 sol
                                                      6 X-circle 13 alt. brevis

                                                      PageFormat Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents the format of pages in a Score Object .

                                                      The PageFormat object describing the page format of a score can be obtained with:
                                                        var fmt = score.pageFormat;
                                                      where score is a Score Object object.

                                                      (Formally, a new PageFormat could be created with:
                                                        var fmt = new PageFormat();
                                                      but such an object would be useless.)

                                                      See also:

                                                      Score Object .

                                                      Properties

                                                      Name Type Description
                                                      width double page width in mm (read-only).
                                                      height double page height in mm (read-only).
                                                      landscape bool true if the score has a landscape orientation (read-only).
                                                      twosided bool true if the score is two-sided (read-only).

                                                      Methods

                                                      None.

                                                      Part Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a part of a score, either instrumental or vocal, and allows access to some of its properties.

                                                      To retrieve the n-th part of a score, the Score.part(n) method of a Score Object can be used.
                                                      New parts cannot be created as such; to add a new part to a score, use the Score.appendPart(partName) method instead.

                                                      See also:

                                                      Score Object .

                                                      Properties

                                                      Name Type Description
                                                      longName string long name of the part, for instance "Pianoforte" (read-only).
                                                      shortName string short name of the part, for instance "Pf." (read-only).
                                                      midiChannel integer MIDI channel of the part (read-only).
                                                      midiProgram integer MIDI program of the part (read-only).
                                                      staves integer Number of staves in the part (read-only).

                                                      Methods

                                                      None.

                                                      Rest Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a rest, i.e. a silent constituent of a voice (opposed to Chord, which is made of notes).

                                                      A new Rest can be created with:
                                                        rest = new Rest();
                                                      or
                                                        rest = new Rest(score);
                                                      where score is a Score Object .

                                                      The Rest existing at a given time of a given voice of a given staff of a score can be obtained by moving a Cursor to the needed staff / voice / time and using:

                                                         if ( cursor.isRest() )
                                                            rest = cursor.rest();

                                                      See also:

                                                      Cursor Object , Harmony Object , Score Object .

                                                      Properties

                                                      Name Type Description
                                                      tickLen integer length of the rest; expressed in conventional units (see Tick Length values ).

                                                      Methods

                                                      addHarmony(Harmony harmony)

                                                      Add the Harmony harmony to the staff point corresponding to the rest.

                                                      Score Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a complete score.

                                                      A new score can be created with:
                                                      var a = new Score();
                                                      The new score is appended to MuseScore's list of scores.

                                                      The current score can be obtained with:
                                                      var b = curScore;

                                                      Properties

                                                      Name Type Description
                                                      composer string name of the composer
                                                      duration integer total score duration in seconds (read-only)
                                                      fileName string the name of the file without the path, "Untitled" for unsaved scores (read-only). (MuseScore 2.0+ as of r5033 )
                                                      fileVersion string the version of the version information (MuseScore 1.2+)
                                                      hasHarmonies bool true if a valid chordname is found
                                                      hasLyrics bool true if a lyric element is found in the score
                                                      keysig integer Key signature at the beginning: -7 (= 7 flats) to 7 (= 7 sharps) or undefined for custom signature
                                                      measures integer Number of actual measures (read only)
                                                      pageFormat PageFormat Object the format of pages in the score (currently disabled)
                                                      pages integer Number of pages (read only)
                                                      parts integer Number of parts (read only)
                                                      path string the path of the score without the filename, an empty string if the file is not saved (read-only). (MuseScore 2.0+ as of r5033 )
                                                      poet string name of the poet/lyricist
                                                      staves integer number of staves (read-only)
                                                      subtitle string subtitle of the score
                                                      title string title of the score
                                                      timesig TimeSig Object the time signature of the score (MuseScore 1.1+)
                                                      version string the version of MuseScore that the score was last saved with (MuseScore 1.2+)

                                                      Methods

                                                      appendMeasures(integer n)

                                                      Append n measures to the score.

                                                      appendPart(string partname)

                                                      Append a new part to the score.
                                                      partname refers to an instrument name in the file instruments.xml.
                                                      The part will be initialized from the named instrument in this file.
                                                      If partname is empty, a default part will be appended.

                                                      close()

                                                      Close score. (MuseScore 1.2+)

                                                      endUndo()

                                                      End undoable operations.

                                                      bool load(string path)

                                                      Load the score file located at path. Can be any format supported by MuseScore, the extension is used to find out the type of file.

                                                      int metatag(string tag)

                                                      Sets metatag tag to tag. (Version 2.0+)

                                                      int metatag(string tag, string value)

                                                      Sets metatag tag to value. (Version 2.0+)

                                                      Part part(int i)

                                                      Part object at index i.

                                                      bool save(string path, string type)

                                                      Write score into file path. The file extension type determines the type of file:
                                                      "mscz", "mscx", "xml", "mxl", "mid", "pdf","ps", "png", "svg", "ly", "wav", "flac", "ogg".
                                                      Not all types may be available.

                                                      bool save(string path, string type, string soundfontPath)

                                                      For soundfile output (type being one of "wav", "flac", "ogg"), the soundfont to be used can be specified as an additional parameter. (Not available anymore in MuseScore 2.x as of r5011 ).

                                                      bool save(string path, "png", boolean screenshot, boolean transparent, double dpi, boolean grayscale)

                                                      When saving into a PNG file, additional parameters can be specified.

                                                      setExpandRepeat(bool)

                                                      Turns on or off the repetitions of ritornellos.

                                                      setStyle(string key, string value)

                                                      Set the style element with name key to the given value. Known to work for the given keys:

                                                      • chordDescriptionFile
                                                      • lastSystemFillLimit

                                                      startUndo()

                                                      Starts undoable operations.

                                                      Text Object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Represents a textual element of a score.

                                                      A new Text belonging to a score can be created with:
                                                        text = new Text(score);
                                                      where score is a Score Object .

                                                      Currently, only 'staff text' elements can be added to a score (by moving a Cursor Object to the required point and using the Cursor.putStaffText(text) method).

                                                      See also:

                                                      Cursor Object , Score Object .

                                                      Properties

                                                      Name Type Description
                                                      color QColor the text foreground colour.
                                                      defaultFont QFont the font used to display the text. Hint: this may be set to 10 point Times with var font = new QFont("Times", 10); text.defaultFont = font;.
                                                      text string the text to display.
                                                      xOffset double the horizontal offset (in spaces*) from the default position of the text (positive: to the right, negative: to the left).
                                                      yOffset double the vertical offset (in spaces*) from the default position of the text (positive: down, negative: up).

                                                      * Note: "Spaces" is a relative measurement unique to music notation. One space unit is the vertical distance between two lines of a staff.
                                                      * Note: Due to a bug in the plugin framework, xOffset and yOffset are parsed as integers.

                                                      Methods

                                                      None.

                                                      TimeSig object

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      Available in MuseScore 1.1+ only

                                                      The TimeSig object represents the time signature of a score.

                                                      A new TimeSig object is created with either:
                                                      var ts = new TimeSig()
                                                      or
                                                      var ts = new TimeSig(numerator, denominator)

                                                      In the former case an "empty" TimeSig object is created. Before it is used, it needs to be initialized by one of the methods below. In the latter case, the TimeSig object is initialized with the time signature numerator / denominator.

                                                      The time signature of the current score can be obtained with curScore.timesig, and you can, for instance, change it with the change method (e.g. curScore.timesig.change(3,4))

                                                      Properties

                                                      Name Type Description
                                                      type int an internal value describing the time signature
                                                      the only usage of this property is to copy the time signature from one TimeSig object to another (e.g. newsig.type = oldsig.type

                                                      Methods

                                                      change(int numerator, int denominator)

                                                      Change the time signature to numerator / denominator.

                                                      setAllaBreve()

                                                      Change the time signature to Alla Breve.

                                                      setCommonTime()

                                                      Change the time signature to Common Time

                                                      Internationalization

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      To translate a plugin, you need to use qsTr() for all your "quoted strings" in the .js files. qsTr() has 2 arguments, the 1st is the to be translated string, the 2nd is a comment to the translator (and later visible in Qt Linguist) and optional.
                                                      It can work with placeholders, e.g. qsTr("Pages: %1") .arg(NumberOfPages)
                                                      If the string is outside a function, use QT_TR_NOOP(). For example, for the [[nodetitle:Plugin File Structure|menu item]] , use QT_TR_NOOP("Plugins.MyMenuItem")
                                                      (although, as per this forum thread the term 'Plugins' should not get translated, not yet at least)

                                                      Not extra steps needed for .ui files.

                                                      Next the plugin needs a directory on its own, do not conflict with other plugins' translations

                                                      Then create a directory translations into the plugins' directory. You need to put locale_XX.qm files in it. How to obtain a .qm file for your plugin?
                                                      Run
                                                      replace XX by the targetted language (eg.: "de" for German) and include .js and .ui files
                                                      lupdate translations/locale_XX.ts
                                                      This extracts all the to be translated strings from ther .js and .ui files into that .ts file.
                                                      Repeat for other languages, if need be.

                                                      Use Qt Linguist to put the translation into locale_XX.ts. Once done use File → Release in Qt Linguist or run the following:
                                                      lrelease translations/locale_XX.ts
                                                      That will create/update a locale_XX.qm file.
                                                      Now, run MuseScore in your language and your plugin should be translated!

                                                      More information on QtScript website.

                                                      If you want to look at working examples, check the batch export plugin and/or the MuseScore 1.2+ version of the musescore.com plugin ("Save online").

                                                      Global Variables

                                                      This documentation applies to plugins for 1.x only!

                                                      
                                                      

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      
                                                      

                                                      Click here for Documentation for 3.x

                                                      
                                                      
                                                      

                                                      The following variables are directly available to any plugin.

                                                      Name Type Description
                                                      curScore Score Object the score currently active in MuseScore, if any, see also below (read-only).
                                                      division integer number of MIDI ticks for 1/4 note (read-only).
                                                      localeName ? ? (currently disabled)
                                                      mscore ? ?
                                                      mscoreDPI integer ?
                                                      mscoreMajorVersion integer the first part of the MuseScore version (read-only).
                                                      mscoreMinorVersion integer the second part of the MuseScore version (read-only).
                                                      mscoreUpdateVersion integer the third part of the MuseScore version (read-only).
                                                      mscoreVersion integer the complete version number of MuseScore in the form: MMmmuu (Major / minor / update; read-only).
                                                      pluginPath string the complete path of the running plugin, without file name (read-only).

                                                      in MuseScore 1.2+ you can (and should, before accessing curScore in any other form or shape!) test, if at least one score is open with the following code.

                                                      if (typeof curScore === 'undefined')
                                                         //no score

                                                      Note Pitch values

                                                      Note pitches are internally expressed with their respective MIDI pitch values. This corresponds to the absolute height of the note, regardless of the way it is actually written (enharmony; to retrieve the actual enharmony employed for a note, uses its Tonal Pitch Class enum instead).
                                                      The pitch is used by the following property:
                                                        Note Object .pitch

                                                      Note Pitch Values

                                                      Note \ Octave -1 0 1 2 3  
                                                      C 0 12 24 36 48  
                                                      C# 1 13 25 37 49  
                                                      D 2 14 26 38 50  
                                                      D# 3 15 27 39 51  
                                                      E 4 16 28 40 52  
                                                      F 5 17 29 41 53  
                                                      F# 6 18 30 42 54  
                                                      G 7 19 31 43 55  
                                                      G# 8 20 32 44 56  
                                                      A 9 21 33 45 57  
                                                      A# 10 22 34 46 58  
                                                      B 11 23 35 47 59  
                                                      Note \ Octave 4 5 6 7 8 9
                                                      C 60 (middle C) 72 84 96 108 120
                                                      C# 61 73 85 97 109 121
                                                      D 62 74 86 98 110 122
                                                      D# 63 75 87 99 111 123
                                                      E 64 76 88 100 112 124
                                                      F 65 77 89 101 113 125
                                                      F# 66 78 90 102 114 126
                                                      G 67 79 91 103 115 127
                                                      G# 68 80 92 104 116 --
                                                      A 69 81 93 105 117 --
                                                      A# 70 82 94 106 118 --
                                                      B 71 83 95 107 119 --

                                                      Tick Length values

                                                      Note and rest values are expressed in an internal unit, to express their mutual relationships and to make them independent from actual tempo. This unit is used by the following object properties:

                                                      • Chord Object .tickLen
                                                      • Rest Object .tickLen

                                                      Tick Lengths

                                                      whole note (semibreve) 1920
                                                      double-dotted half note 1680
                                                      dotted half note 1440
                                                      triplet whole note (1/3 of breve) 1280
                                                      half note (minim) 960
                                                      double-dotted crochet 840
                                                      dotted crochet 720
                                                      triplet half note (1/3 of semibreve) 640
                                                      1/4 note (crochet) 480
                                                      double-dotted quaver 420
                                                      dotted quaver 360
                                                      triplet crochet (1/3 of minim) 320
                                                      1/8 note (quaver) 240
                                                      double-dotted semiquaver 210
                                                      dotted semiquaver 180
                                                      triplet quaver (1/3 of crochet) 160
                                                      1/16 note (semiquaver) 120
                                                      double-dotted demi-semiquaver 105
                                                      dotted demi-semiquaver 90
                                                      triplet semiquaver (1/3 of quaver) 80
                                                      1/32 note (demi-semiquaver) 60
                                                      dotted hemi-demi-semiquaver 45
                                                      triplet demi-semiquaver (1/3 of semiquaver) 40
                                                      1/64 note (hemi-demi-semiquaver) 30

                                                      Tonal Pitch Class enum

                                                      The Tonal Pitch Class (tpc) is used to differentiate among notes with the same MIDI pitch but with different representation (also covering enharmony). The tpc is used by several objects properties:
                                                        Harmony Object .base
                                                        Harmony Object .root
                                                        Note Object .tpc

                                                      Tonal Pitch Classes in numeric order

                                                      -1 Fbb   6 Fb   13 F   20 F#   27 F##
                                                      0 Cbb   7 Cb   14 C   21 C#   28 C##
                                                      1 Gbb   8 Gb   15 G   22 G#   29 G##
                                                      2 Dbb   9 Db   16 D   23 D#   30 D##
                                                      3 Abb   10 Ab   17 A   24 A#   31 A##
                                                      4 Ebb   11 Eb   18 E   25 E#   32 E##
                                                      5 Bbb   12 Bb   19 B   26 B#   33 B##

                                                      Tonal Pitch Classes in pitch order

                                                      11   31 A##   19 B   7 Cb
                                                      10   24 A#   12 Bb   0 Cbb
                                                      9   29 G##   17 A   5 Bbb
                                                      8   22 G#         10 Ab
                                                      7   27 F##   15 G   3 Abb
                                                      6   32 E##   20 F#   8 Gb
                                                      5   25 E#   13 F   1 Gbb
                                                      4   30 D##   18 E   6 Fb
                                                      3   23 D#   11 Eb   -1 Fbb
                                                      2   28 C##   16 D   4 Ebb
                                                      1   33 B##   21 C#   9 Db
                                                      0   26 B#   14 C   2 Dbb

                                                      How to for plugin development

                                                      This documentation applies to plugins for 1.x only!

                                                      Documentation for 2.x+ is built into the Plugin Creator of Musescore.

                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      Click here for Documentation for 3.x

                                                      A list of useful snippets for plugin creation.

                                                      Applying a function to each note of a selection

                                                      // Apply the given function to all notes in selection
                                                      // or, if nothing is selected, in the entire score
                                                      function applyToNotesInSelection(func) {
                                                            if (typeof curScore === 'undefined')
                                                                  return;
                                                      
                                                            var cursor     = new Cursor(curScore);
                                                            cursor.goToSelectionStart();
                                                            var startStaff  = cursor.staff;
                                                            cursor.goToSelectionEnd();
                                                            var endStaff   = cursor.staff;
                                                            var endTick    = cursor.tick() // if no selection, end of score
                                                       
                                                            if (cursor.eos()) { // no selection
                                                                  startStaff = 0; // start with 1st staff
                                                                  endStaff = curScore.staves; // and end with last
                                                            }
                                                      
                                                            for (var staff = startStaff; staff < endStaff; ++staff) {
                                                                  for (var voice = 0; voice < 4; voice++) {          
                                                                        cursor.goToSelectionStart(); // sets voice to 0
                                                                        cursor.voice = voice; //voice has to be set after goTo
                                                                        cursor.staff = staff;
                                                                        if (cursor.eos())
                                                                                cursor.rewind() // if no selection, beginning of score
                                                      
                                                                        while (cursor.tick() < endTick) {
                                                                              if (cursor.isChord()) {
                                                                                    var chord = cursor.chord();
                                                                                    var n     = chord.notes;
                                                                                    for (var i = 0; i < n; i++) {
                                                                                          var note   = chord.note(i);
                                                                                          func(note);
                                                                                    }
                                                                              }
                                                                              cursor.next();
                                                                        }
                                                                  }
                                                            }
                                                      }

                                                      Calling an external process or a command line tool

                                                      Lilypond is called in this example. A plugin could also save as MusicXML, manipulate the MusicXML file and open it again via Score.load()

                                                      //---------------------------------------------------------
                                                      //    init
                                                      //    this function will be called on startup of mscore
                                                      //---------------------------------------------------------
                                                      
                                                      function init()
                                                            {
                                                            }
                                                      
                                                      //-------------------------------------------------------------------
                                                      //    run
                                                      //    this function will be called when activating the
                                                      //    plugin menu entry
                                                      //-------------------------------------------------------------------
                                                      
                                                      function run()
                                                            {
                                                            // temp folder for user  C:\Users\<USERNAME>\AppData\Local\Temp on windows
                                                            var path = QDir.tempPath(); // 
                                                            var file = path + "/score.ly";
                                                            curScore.save(file, "ly");
                                                            
                                                            //See http://doc.qt.nokia.com/latest/qprocess.html
                                                            var lilypond = new QProcess();
                                                            var args = new Array();
                                                            args[0]= "-o";
                                                            args[1]= path;
                                                            args[2]= file;
                                                            
                                                            // if you want to log output
                                                            //lilypond.setStandardOutputFile("stdout.txt");
                                                            //lilypond.setStandardErrorFile("stderr.txt");
                                                      
                                                            lilypond.start("lilypond", args );
                                                            lilypond.waitForStarted();
                                                            lilypond.waitForFinished();
                                                            }
                                                      
                                                      //---------------------------------------------------------
                                                      //    menu:  defines were the function will be placed
                                                      //           in the MuseScore menu structure
                                                      //---------------------------------------------------------
                                                      
                                                      var mscorePlugin = {
                                                            menu: 'Plugins.Lilypond process',
                                                            init: init,
                                                            run:  run
                                                            };
                                                      
                                                      mscorePlugin;
                                                      

                                                      Creating a GUI using Qt

                                                      You can access almost any class of the Qt Framework from the plugin framework
                                                      The easiest way to make a dialog or UI is to use Qt Creator. Qt Creator is installed with your version of Qt.

                                                      1. Open Qt Creator
                                                      2. File -> New File or Project -> Qt -> Qt Designer Form
                                                      3. Create your form with the graphic interface. You may want to learn more about Layout Management in Qt
                                                      4. Save your file as for example my.ui
                                                      5. In your script use the following lines
                                                      6. Signals and slots are a Qt concept. When a signal is fired (for example with a button is clicked), slots connected to it are executed. Slots can be define in your script to do something when something happens in the interface

                                                      Plugins for 2.x

                                                      Most of the documentation for Plugins 2.x is accessed from the Help screen in Plugin Creator in MuseScore.
                                                      ( ⇒ In Musescore press Ctrl+Shift+P, then F1 to bring it up. )

                                                      However, here is a quick guide to get you started.
                                                      The main class is MuseScore.
                                                      Use 'New' to create a skeleton plugin, which creates a simple "Hello World" to the console.
                                                      Plugins are coded in QML

                                                      The best place to look for how to do things are the sample plugins provided.
                                                      These are stored in the plugins folder where musescore is installed, e.g. for 64-bit Windows: C:\Program Files (x86)\MuseScore 2\plugins, see also the handbook for Installation of Plugins.

                                                      • abc_import.qml - Brings up a dialog style plugin that contacts a web service to translate ABC notation in a MuseScore score.
                                                      • colornotes.qml
                                                      • createscore.qml
                                                      • notenames.qml
                                                      • panel.qml - demonstrates a panel style plugin.
                                                      • random.qml - demonstrates generating a random score.
                                                      • random2.qml - demonstrates generate a random score WITH a panel for user input.
                                                      • run.qml
                                                      • scorelist.qml
                                                      • view.qml
                                                      • walk.qml - demonstrates one method of walking through all the elements in a score.

                                                      For some more details about those check the handbook for Plugins installed by default

                                                      Note that in the current version of MuseScore 2.1 plugins loaded by Plugin Manager require you to restart MuseScore to pick up any changes. You can however use Plugin Creator's Run button to test them.

                                                      Plugins for 3.x

                                                        Not to be confused with Musescore 4's VST and VSTi feature. Other plugin versions see Plugin development.

                                                        Introduction

                                                        Edit this page to share Musescore 3 plugin programming knowledge. Discussion thread.

                                                        Writing and running plugins requires,

                                                        • Musescore Studio installed,
                                                        • Javascript knowledge, and
                                                        • QML knowledge.

                                                        You own what you create.

                                                        QML

                                                        Qt company invented QML,

                                                        1. rules to write .qml files, including
                                                          • QML Types
                                                            • Data, eg a Point has a X and a Y
                                                            • UI, eg a Rectangle has width, height, color etc
                                                        2. extended rules to write .qml files, by adding import statements
                                                          • Qt + (module name) eg Qt.labs.settings
                                                          • Qt Quick
                                                            • Data
                                                            • UI, the fancier buttons etc
                                                          • Qt Quick + (module name) eg Qt Quick Controls, the even more fancier buttons etc
                                                        3. rules to write C++ (.cpp, .h etc) files including,
                                                          • Qt Widget, fine-control UI programming.
                                                          • QML Widget (Qt Quick Widget), abstract UI programming.

                                                        Bullet point 3 does not concern plugin dev. It is for Musescore main app devs only. See How to tell apart?.

                                                        //https://doc.qt.io/archives/qt-5.9/qtqml-documents-topic.html
                                                        import QtQuick 2.0
                                                        Rectangle {
                                                            width: 100; height: 100
                                                            color: "red"
                                                            MouseArea {
                                                                anchors.fill: parent
                                                                onClicked: console.log("Button clicked!")
                                                                // equivalent to 
                                                                // onClicked: function(){ console.log("Button clicked!") }
                                                            }
                                                        }

                                                        Function requires javascript / ECMAScript 7th edition syntax. Unsupported are arrow function, spread syntax, array.fill etc.

                                                        Musescore plugin qml

                                                        Musescore plugin qml uses,

                                                        1. all rules of .qml files,
                                                          • not available is Qt Quick Controls style (import QtQuick.Controls.Material). See https://musescore.org/en/node/21875#comment-98406;
                                                          • Qt Webengine only available on Windows;
                                                        2. functions made available by the Musescore dev team.

                                                        Capability and limitation

                                                        This non-exclusive list contains observations reported by coders.

                                                        • Examples of basic functionality
                                                          • Change a note's property such as pitch, color
                                                          • Add or remove score elements such as notes, rests, symbol, text
                                                          • Read or save tags in File > Score Properties
                                                          • Play the audio of a score or part of score
                                                          • Create a new staff (Cannot change its name afterwards)
                                                          • Create/update text and symbols eg dynamics, lyrics etc
                                                          • Create/update tempo
                                                          • Change playback speed (cmd('playback-speed-increase'))
                                                          • Mute or change volume of an instrument
                                                          • Update MIDI Play Event
                                                          • Conversion of a different score format to and from MuseScore
                                                          • Send and receive score data through internet
                                                          • Opens a local or online webpage inside MuseScore
                                                          • Save or load a score or any file
                                                          • Start another program on your Windows/iOS outside MuseScore
                                                        • Seems unachievable (please share if you find workaround, for example a suitable cmd() command )
                                                          • Detect whether audio is playing.
                                                          • Read playback caret/cursor/position position. See also read current selection position , which may contain the editing caret position.
                                                          • Reposition score viewport ; or playback caret/cursor/position workaround cmd("select-next-chord").
                                                          • Change instrument name. See also read instrument name.
                                                          • Read content of frame children eg title composer etc without directly clicking on it (See 1. Access frame by cmd('prev-element'); 2. or cmd ('insert-vbox') suggested by michaelnorris ; 3. workaround fork)
                                                          • Mimic a click on a palette item (workaround fork)
                                                          • Add or access spanners such as pedal marking to a score (workaround fork)
                                                          • Add key signature to a score (workaround fork)
                                                          • Update key signatures on a score
                                                          • Read clef info, see https://musescore.org/en/node/357788
                                                          • Send MIDI CC
                                                          • Start or stop other plugins (workaround fork)
                                                          • Add toolbar button (build-in toolbar).
                                                          • Add right click context menu item.
                                                          • Manipulation of MuseScore's window eg minimize
                                                          • Use a non build-into-Musescore text font, see workaround post (Can use with pre setup inside qml, see snippet)
                                                          • Inserting image. See https://musescore.org/en/node/373264
                                                          • Expose the program with new hooks or API entry points, or create localhost server / services.

                                                        See also musescore 4 plugin update ideas1 and ideas2.

                                                        Alternatives to QML plugin

                                                        • Run Musescore with Command line
                                                        • Edit a score file (.mscx is plaintext):
                                                          • save as .mscz : rename as .zip, extract, edit, zip ; or
                                                          • save as .mscx and edit.
                                                          • elsewhere's parser https://musescore.org/en/project/musicxml-parser
                                                          • mirabilos' tools https://musescore.org/en/node/321691#comment-1082043
                                                          • yonah_ag's parser (retired) https://musescore.org/en/node/323083
                                                        • AutoHotkey Kit for MuseScore.
                                                        • Get data of realtime midi output or exported .midi.
                                                        • Use a non build-into-Musescore font with this workaround post.
                                                        • Install Musescore 3.x Nightly and use the (experimental) scripting/macro function to record and replay sequence of commands "Tools → Script Recorder".

                                                        Workflow and external editors

                                                        Edit plugin with,

                                                        • Plugin Creator, or
                                                        • external editor (Qt Creator, Sublime Text, Notepad++ (TIPS: use the Qt user-defined language), vim, emac, https://duckduckgo.com/?q=qml+online+editor etc).

                                                        Plugin scripts are cached at program startup (QQmlComponent loadUrl does not refresh after compile). To run a script updated afterwards in external editor,

                                                        • Restart Musescore and then run from the plugin menu;
                                                        • Load the script inside Plugin Creator,
                                                          • Inside the Plugin Creator, open an existing .qml file.
                                                          • Press Run.
                                                          • Edits qml file in external editor.
                                                          • Press Refresh in Plugin Creator.
                                                          • Press Run; or
                                                        • Use 3.7 evolution Plugin Creator ( productivity improvement)

                                                        Code examples

                                                        copycat200.jpg

                                                        Copy and paste. Share yours.

                                                        Common tasks

                                                        Changing menu name, window behavior

                                                        • Edit Plugin Base Component Musescore { }

                                                        Get elements

                                                        • Read Score elements, internal score structure.
                                                        • curScore.newCursor() to create a Cursor, transverse and find. For more info, open and study walk.qml
                                                        • curScore.newCursor() to create a Cursor, sync with current mouse selection example
                                                        • select with mouse click then get curScore.selection.elements[ ]
                                                        • listen to state.selectionChanged, get curScore.selection example
                                                        • select with curScore.selection.selectRange() , get curScore.selection example

                                                        Read meaningful info of element type

                                                        • Print .name property.

                                                        Match and compare element types

                                                        enum2.png

                                                        Match and compare reliably with .type property eg  Accidental.FLAT . See enumeration / enum. These pages are useful,

                                                        • Namespace/enum list
                                                        • Base Class/Component

                                                        Try log type enum string snippet and Makeshift REPL plugin function tester plugin for enum and keyword autocompletion.

                                                        Note starting time, ending time, duration (note value)

                                                        • api doc Tick Length values
                                                        • Cursor and segment has .tick, snippet

                                                        Note pitch

                                                        • use case and snippets
                                                        • api doc Note Pitch values
                                                        • api doc Tonal Pitch Class

                                                        Placement of objects, cursor track and tick

                                                        cursor.rewindToTick(x) will only work correctly if there is a segment at x. Otherwise it will put the cursor at the next available segment (in the current track) after x, see https://musescore.org/en/node/345409#comment-1206211

                                                        Save settings to score, tagging

                                                        • snippet

                                                        Save settings to OS

                                                        eg registry in windows

                                                        • Settings{ };

                                                        File saving and loading

                                                        • api writeScore, readScore
                                                        • custom data in MuseScore several methods see this snippet and notes
                                                        • study the Daily Log plugin
                                                        • FileIO for OS level op, usage see Object Explorer plugin

                                                        Instrument / staff info eg instrument name, and channel audio status

                                                        • snippet
                                                        • note

                                                        Create/update MIDI Play Event

                                                        • API doc PlayEvent
                                                        • study the Arpeggiator plugin and the articulation and ornamentation control plugin

                                                        Fetching webpage

                                                        • snippet
                                                        • study the updated online service version of ABC Import plugin
                                                        • the Harmony analysis tool plugin

                                                        Starting another program, command line and parameters

                                                        • snippet
                                                        • receiving / passing MuseScore command line parameter

                                                        Get UI theme status

                                                        Not engraving style

                                                        •  SystemPalette { }. Source post. See color and metric details in source code.

                                                        Browsing help sites

                                                        QML help sites

                                                        1. musescore.org

                                                        • boilerplates.
                                                        • notes and snippets.

                                                        2. doc.qt.io

                                                        When browsing https://doc.qt.io, note that

                                                        • "C++ classes" pages are not useful in qml.
                                                        • Check qt version on URL. Musescore 3.6.2 requires Qt 5.9.9 syntax. Some pages can be auto redirected by changing "6" in URL to "5.9". eg changing https://doc.qt.io/qt-6/qml-qtquick-wheelevent.html to https://doc.qt.io/qt-5.9/qml-qtquick-wheelevent.html and refreshing jumps to https://doc.qt.io/archives/qt-5.9/qml-qtquick-wheelevent.html.
                                                        • Use a matching the import module version number on pages returned from site search. eg site search "button" returns QtQuick 1 Button but not QtQuick 2 Button.

                                                          url6.png
                                                          url59.png
                                                          text_cpp.png
                                                          text_qml.png

                                                        plugin help sites

                                                        1. musescore.github.io

                                                        • Official Musescore Plugin API Documentation. Try the search on the top right if menus are hard to understand.
                                                        • List of all API object types

                                                        2. The cmd ( ) method

                                                        Unstable. Backup! Use cmd() to run internal program actions.

                                                        • complete list in CSV format
                                                        • source code
                                                        • calculuswhiz's handpicked list
                                                        • This command parser plugin makes them more scriptable

                                                        3. musescore.org

                                                        • Must read about The Plugin Base Component Musescore { }.
                                                        • Notes, use case and snippets.

                                                        Useful Resource

                                                        The Plugin Base Component Musescore { }

                                                        • Api doc
                                                        • Component.onCompleted
                                                          Run once, right after the plugin component is created, before console.log() is functional
                                                        • You should not use Qt.quit() in your plugins, see this post on why, and possible different approaches. Qt.quit() crashes Musescore 4.0 plugins.
                                                        • Set pluginType: "dock" for normal behavior eg stay on top; "dialog" is quite outdated.
                                                        • Create plugin as an action instead of a persistent object with prop and methods, because when the user close and reopen the plugin window, it may cause unwanted behavior.
                                                          • This post explains the nature of onRun() and Qt.quit(). The code Qt.quit() may not work the way you expect.
                                                          • The plugin window onClosing Event is not accessable from QML. The [Plugin API base] is in a QQuickView in a QWidget window docked inside a QDockWidget , see code.
                                                          • No way to detect plugin's open or closed.
                                                          • After plugin window is closed, listeners will continue to run, eg experimental onScoreStateChanged Handler
                                                          • Workaround palette-like plugin
                                                          • use Qt Labs Settings to save data across sessions
                                                          • other tips also check out the snippets and notes page

                                                        Score elements, internal score structure

                                                        • Musescore Internal Score Representation
                                                        • Confused by API Class Inheritance Hierarchy? Study inheritance object oriented programming.
                                                        • Use the debugger by doing the following steps
                                                          • debugger.PNG
                                                          • Install MuseScore Nightly
                                                          • Append -e in shortcut and start
                                                          • Edit > Debugger
                                                        • Due to Musescore dev team's plugin system design, all element types contains all properties (keys) and useless properties have undefined values. There is no decent way to filter out valid properties except,
                                                          • Trying out to see if code executed works,
                                                          • Digging into the source code,
                                                          • Try Object Explorer plugin which exhaustively print out element info, also see this well documented code,
                                                          • Try Makeshift REPL plugin function tester plugin's "Diff an element" example.

                                                        Bundled resource (qrc protocol)

                                                        • Icons, symbols and fonts (not soundfont) see this snippet
                                                        • musescore.qrc (src ref)

                                                        Searchable museScore 3.6.2 source code

                                                        • https://github.com/fp22june/MuseScoreTag362
                                                        • /libmscore
                                                        • API 3.5 (for Musescore 3.6) /mscore/plugin/api
                                                        • Some files are mirrored on the doxygen website.

                                                        Translation

                                                        • Internationalization
                                                        • one solution to folder structure

                                                        Troubleshooting with help from community

                                                        • Identify the problem. If it is QML or javascript, also seek help on stackoverflow and forum.qt.io.
                                                        • Use google and the musescore.org forum search before posting new questions.
                                                          search.png
                                                        • musescore.org plugins forum,
                                                        • Try to provide a Minimal, Reproducible Example, the community is usually more than happy to help.
                                                        • Enclose qml codes between <qml> and </qml> to get better layout and to avoid musescore.org auto escaping eg to show & instead of &amp;

                                                        Share your plugin

                                                        • Publish plugin project on musescore.org. Fill out the API compatibility 3.x or else your plugin with remain hidden to most users.
                                                        • Chat on the plugin forum.

                                                        Licensing

                                                        • Writing in QML language is unlikely to be the ground on which plugin script subjects to Qt licensing.
                                                        • Opening in Musescore is unlikely to be the ground on which plugin script subjects to MuseScore 3 GPL licensing.

                                                        Credits

                                                        • dmitrio95

                                                        Boilerplates, snippets, use cases and QML notes

                                                          Marked Default are copied from plugins bundled with MuseScore 3 installation, open them to learn more.

                                                          --- NOTES AND USE CASE: ---

                                                          QML notes on WebEngine

                                                          QML notes on keyboard and mouse input

                                                          use case: Add Fingering Text

                                                          use case: Changing an Existing Note's Pitch

                                                          use case: Element Explorer

                                                          --- BOILERPLATES AND SNIPPETS: ---

                                                          QML responsive layout templates

                                                          • QML boilerplates

                                                          import module statements versions

                                                          Musescore 3.6.2 use Qt 5.9.9, for latest version of common modules use:

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          import QtQuick.Layouts 1.2
                                                          import QtQuick.Dialogs 1.2
                                                          import Qt.labs.settings 1.0
                                                          import FileIO 3.0
                                                          import QtWebEngine 1.5 // web modules are Windows only
                                                          import QtWebChannel 1.0 // web modules are Windows only

                                                          • import API FileIO module version
                                                          • import module version at Qt
                                                          • import module version at wikipedia
                                                          • import WebChannel module version

                                                          Run this script once. then upon clicking on a element, print all its properties and func on logger

                                                          also try the buildin debugger
                                                          Object Explorer plugin exhaustively print out element info
                                                          see also: use case: Element Explorer

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug20"
                                                              onScoreStateChanged: {
                                                                if (state.selectionChanged && curScore){
                                                                  var es=curScore.selection.elements
                                                                  for (var i = 0; i < es.length; i++) {
                                                                    console.log('\n'+es[i].name)
                                                                    for(var p in es[i]){
                                                                      console.log(es[i].name+"."+p+" : "+es[i][p])
                                                                    }
                                                                  }
                                                               }
                                                            }
                                                          }

                                                          run this script once to sync/bind the time position of the Cursor to first note of current selection

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug2"
                                                            id:pluginscope
                                                            property var c
                                                            onRun: {
                                                              pluginscope.c=curScore.newCursor()
                                                              pluginscope.c.inputStateMode=Cursor.INPUT_STATE_SYNC_WITH_SCORE
                                                            }
                                                            onScoreStateChanged: {
                                                              if (state.selectionChanged && curScore) console.log( pluginscope.c.tick )
                                                            }
                                                          }

                                                          select everything on the score, then filter by element type

                                                          Note: selectRange() parameter endTick and endStaff are excluded from selection

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug3"
                                                            onRun: {
                                                              curScore.startCmd()
                                                              curScore.selection.selectRange(0,curScore.lastSegment.tick + 1,0,curScore.nstaves);    //cmd("select-all")
                                                              curScore.endCmd()
                                                              var es=curScore.selection.elements
                                                              for (var i = 0; i < es.length; i++) {
                                                                if(es[i].type==Element.NOTE) console.log(es[i].pitch)
                                                              }
                                                            }
                                                          }

                                                          move the Cursor to the beginning of score

                                                          more info: move cursor to start or end of your current selection ,or tick
                                                          see also Default walk.qml

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                                menuPath: "Plugins.debug5"
                                                                onRun: {
                                                                  var c= curScore.newCursor();
                                                                  c.voice    = 0;
                                                                  c.staffIdx = 0;
                                                                  c.rewind(Cursor.SCORE_START);
                                                                  console.log(c.tick)    
                                                              }
                                                          }

                                                          log type enum string of one selected element

                                                          import MuseScore 3.0
                                                          MuseScore {
                                                            menuPath: "Plugins.debug55"
                                                            property var reverseEnumElement:(function(){ var x={}; for(var i in Element){  if(typeof Element[i]!=='function')  x[Element[i]]=i  }; return x })()
                                                            onRun:{
                                                              console.log(reverseEnumElement[curScore.selection.elements[0].type])
                                                            }
                                                          }

                                                          log selected note's pitch and next note's pitch

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug4"
                                                            onRun: {
                                                              var e=curScore.selection.elements[0]
                                                              if(e.type==Element.NOTE){
                                                                console.log( "This pitch "+e.pitch )
                                                                var track=e.track
                                                                var seg=e.parent
                                                                while(seg&&seg.type!=Element.SEGMENT){ seg=seg.parent }
                                                                if(seg) var tick=seg.tick
                                                                var c=curScore.newCursor()
                                                                c.track=track  //set track first, setting track will reset tick
                                                                c.rewindToTick(tick)
                                                                var segnext=c.segment.next
                                                                if(segnext
                                                                  &&segnext.elementAt(track).type==Element.CHORD  // 1 or more notes
                                                                  &&segnext.elementAt(track).notes
                                                                ) console.log("Next pitch "+ segnext.elementAt(track).notes[0].pitch )  //0=first entered note
                                                              }
                                                            }
                                                          }

                                                          log selected chord's pitches

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug41"
                                                            onRun: {
                                                              var e=curScore.selection.elements[0]
                                                              var track=e.track
                                                              var seg=e.parent
                                                              while(seg&&seg.type!=Element.SEGMENT){ seg=seg.parent }
                                                              if(seg) var tick=seg.tick
                                                              var c=curScore.newCursor()
                                                              c.track=track  //set track first, setting track will reset tick
                                                              c.rewindToTick(tick)
                                                              if(c.segment.elementAt(track).type==Element.CHORD){
                                                                var notesarray=c.segment.elementAt(track).notes
                                                                if(notesarray&&notesarray.length>0){
                                                                  for (var i = 0; i < notesarray.length; i++){ 
                                                                    console.log('note # '+i+' pitch '+notesarray[i].pitch) 
                                                                  }
                                                                }
                                                              }
                                                            } 
                                                          }

                                                          create new note, assign pitch using addNote( )

                                                          • addNote( ) and addRest( ) advance the cursor whenever possible ,see api reference and notes.
                                                          • They do not return falsy value, using cursor advancement logic as loop conditional statement may leads to infinite loop error.
                                                          • Chord inserted incorrectly when spams multiple measures, see kamilio141414's post
                                                          • see also related snippets below.
                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug7"
                                                            onRun:{
                                                              var c=curScore.newCursor()
                                                              c.inputStateMode=Cursor.INPUT_STATE_SYNC_WITH_SCORE
                                                              curScore.startCmd()
                                                              c.addNote(60) // c.addNote(60,true) to create double stops or chord, or insert note into one //addNote( ) advances the cursor
                                                              curScore.endCmd()
                                                            }
                                                          }

                                                          create new chord using add( ) to designate accidental

                                                          • This snippet utilize both addNote( ) and add( ). addNote( ) and addRest( ) advance the cursor whenever possible,
                                                          • add( ) does not, see above example for more.
                                                          • src elsewhere's post and Emmanuel Roussel (rousselmanu)'s github GPL2.
                                                          • Chord inserted incorrectly when spams multiple measures, see kamilio141414's post
                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug8gpl"
                                                            //
                                                            // create and return a new Note element with given pitch, tpc
                                                            function createNote(pitch, tpc){
                                                              var note = newElement(Element.NOTE);
                                                              note.pitch = pitch;
                                                              note.tpc = tpc;
                                                              note.tpc1 = tpc;
                                                              note.tpc2 = tpc;
                                                              return note;
                                                            }// end CreateNote
                                                          // Use cursor.rewindToTick(cur_time) instead
                                                            function setCursorToTime(cursor, time){
                                                              cursor.rewind(0);
                                                              while (cursor.segment) { 
                                                                var current_time = cursor.tick;
                                                                if(current_time>=time) return true
                                                                cursor.next();
                                                              }
                                                              cursor.rewind(0);
                                                              return false;
                                                            }// end setcursor To Time
                                                            //adds chord at current position. chord_notes is an array with pitch of notes.
                                                            function addChord(cursor, chord_notes, duration){
                                                              if(chord_notes.length==0) return -1;
                                                              var cur_time=cursor.tick;
                                                              cursor.setDuration(duration, 1920);
                                                              cursor.addNote(chord_notes[0]); //add 1st note //addNote( ) advances the cursor
                                                              var next_time=cursor.tick;
                                                              setCursorToTime(cursor, cur_time); //rewind to this note
                                                              var note = cursor.element.notes[0];
                                                              note.tpc = chord_notes[4];
                                                              var chord = cursor.element; //get the chord created when 1st note was inserted
                                                              for(var i=1; i<4; i++){
                                                                var note = createNote(chord_notes[i], chord_notes[i+4]);
                                                                note.tpc = chord_notes[i+4];
                                                                chord.add(note); //add notes to the chord //add( ) does not advance the cursor
                                                                chord.notes[i].tpc = chord_notes[i+4];
                                                              }
                                                              setCursorToTime(cursor, next_time);
                                                              return 0;
                                                            }//end AddChord
                                                            onRun: {
                                                              var cursor = curScore.newCursor(), startStaff, endStaff, endTick, fullScore = false;
                                                              cursor.rewind(1);
                                                              if (!cursor.segment) { // no selection
                                                                fullScore = true;
                                                                startStaff = 0; // start with 1st staff
                                                                endStaff = curScore.nstaves - 1; // and end with last
                                                              } else {
                                                                startStaff = cursor.staffIdx;
                                                                cursor.rewind(2);
                                                                if (cursor.tick === 0) { // this happens when the selection includes the last measure of the score.
                                                                  endTick = curScore.lastSegment.tick + 1;
                                                                } else {
                                                                  endTick = cursor.tick;
                                                                }
                                                                endStaff = cursor.staffIdx;
                                                              }
                                                              cursor.rewind(1); // beginning of selection
                                                              if (fullScore) { // no selection
                                                                cursor.rewind(0); // beginning of score
                                                              }
                                                              cursor.voice = 0;
                                                              cursor.staffIdx = 1;
                                                              // chords[0]: name
                                                              // chords[1]: pitches lo-hi & tpc lo-hi
                                                              // chords[2]: occurences of this voicing
                                                              // chords[3]: instances of this chord name
                                                              var chords=
                                                              [
                                                                ["C7b13",[48,52,56,58,14,18,10,12],1,1], //c,e,ab,bb
                                                                ["C7b13",[52,56,58,62,18,10,12,16],1,1], //e,ab,bb,d
                                                              ];
                                                              for (var c = 0; c < chords.length; c++){
                                                                cursor.staffIdx = 0;
                                                                var harmony = newElement(Element.HARMONY);
                                                                harmony.text = chords[c][0];
                                                                cursor.add(harmony);
                                                                cursor.staffIdx = 1;
                                                                var chord = chords[c][1];
                                                                var cur_time=cursor.tick;
                                                                addChord(cursor, chord, 1920); // 480 OK for quarter note trips; 240 for eight notes etc
                                                              }
                                                            }
                                                          }

                                                          Change the accidental of currently selected note

                                                          Changing note's accidentalType changes pitch and tpc automatically.
                                                          Creating a new Element.ACCIDENTAL with accidentalType and then adding it to a note does not always work as expected.
                                                          For cosmetic purpose accidental without pitch change, and microtonal symbols, use Element.SYMBOL instead, see dmitrio95's post, also see Tuning systems, microtonal notation system, and playback.
                                                          Source: dmitrio95's post and XiaoMigros's post.
                                                          For possible accidentals, see the AccidentalType enum

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug71"
                                                            onRun:{
                                                              var note=curScore.selection.elements[0]
                                                              curScore.startCmd()
                                                              note.accidentalType = Accidental.SHARP2 // the 'x' double sharp
                                                              curScore.endCmd()
                                                              curScore.startCmd()
                                                              note.accidental.color = "red"
                                                              curScore.endCmd()
                                                            }
                                                          }

                                                          update note's pitch

                                                          see also the create note snippet above
                                                          see also use case: Changing an Existing Note's Pitch
                                                          Two scenarios
                                                          * in Fretted eg guitar TAB: must set 5 values: .pitch, .string, .fret, .tpc1, .tpc2
                                                          * in Fretless eg piano: must set 3 values: .pitch, .tpc1, .tpc2
                                                          source notes

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug8"
                                                           //WIP
                                                          }

                                                          add lyrics at selected element and subsequent non rest elements

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug9"
                                                            onRun: {
                                                              var e=curScore.selection.elements[0]
                                                              var seg=e.parent
                                                              while(seg&&seg.type!=Element.SEGMENT){ seg=seg.parent }
                                                              if(seg) var tick=seg.tick
                                                              var c=curScore.newCursor()
                                                              c.rewindToTick(tick)
                                                              c.track=e.track
                                                              var lyr = newElement(Element.LYRICS)
                                                              lyr.text = "muse"
                                                              lyr.verse = 0
                                                              curScore.startCmd()
                                                              c.add(lyr)
                                                              curScore.endCmd()
                                                           
                                                              var lyricsarray=['score','is','awesome']
                                                              c.next()
                                                              while(c&&c.element&&lyricsarray.length>0){
                                                                if(
                                                                  c.element.type==Element.CHORD  // 1 or more notes
                                                                  // &&c.element.type!=Element.REST  //redundant
                                                                ){
                                                                  var lyr = newElement(Element.LYRICS)
                                                                  lyr.text = lyricsarray[0]
                                                                  lyr.verse = 0
                                                                  curScore.startCmd()
                                                                  c.add(lyr)
                                                                  curScore.endCmd()
                                                                  lyricsarray.shift()
                                                                }
                                                                c.next()
                                                              }
                                                            } 
                                                          }

                                                          log the shown key signature at selected position

                                                          see notes on which methods seem not working
                                                          Note: Musescore 3 interpret key signature's shape and flat symbols to provide tonality logic, it does not understand tonality really. The following code returns the key signature shown on screen, it does not always mean the real key in musical sense . Caution when using an open/atonal keysig and/or on transposing instruments; transposing instruments' return value also varies with user's current "Concert Pitch" display status.
                                                          key signature enum are not exposed as API yet, use this hardcoded schema, ref:
                                                          Num of Sharps = positive number
                                                          No symbols = 0
                                                          Num of Flats = negative number

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug29" 
                                                            onRun:{
                                                              var  c=curScore.newCursor()
                                                              c.inputStateMode=Cursor.INPUT_STATE_SYNC_WITH_SCORE
                                                               console.log(c.keySignature)
                                                            }
                                                          }

                                                          get to the title, composer etc frame at start of page

                                                          Did you find a way get to its existing content text eg read title, composer text string ? src ref
                                                          also see metatag snippet which contains score properties set as data field only , which may not be the current visual text

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug12"
                                                            onRun: {
                                                              var c=curScore.newCursor()
                                                              c.rewind(Cursor.SCORE_START)
                                                              curScore.selection.select(c) //tackle weird range select problem
                                                              cmd('prev-element')
                                                              while( curScore.selection.elements[0].type!=Element.VBOX ){
                                                                cmd('prev-element')
                                                              }
                                                              var e=curScore.selection.elements[0]
                                                              console.log(e.name)
                                                            }
                                                          }

                                                          Alternative to modifying existing text: Delete the existing frame, use the addText function:
                                                          curScore.addText("title", "The Park, Op. 44")

                                                          log time signature then create new one at selected position

                                                          some values won't work, always check actual timesig : right click > measure prop see handbook
                                                          See Time Signature Enforcer for a plugin that uses the cmd interface to manipulate the timesigActual of a measure.
                                                          see notes for methods currently not working

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug28"
                                                            onRun: {
                                                              var c=curScore.newCursor()
                                                              c.inputStateMode=Cursor.INPUT_STATE_SYNC_WITH_SCORE
                                                              //
                                                              var m=c.measure.timesigActual  //replace with timesigNominal for displayed symbol
                                                              console.log("timesigActual : "+m.numerator)
                                                              console.log("timesigActual : "+m.denominator)
                                                              //
                                                              var ts=newElement(Element.TIMESIG)
                                                              ts.timesig=fraction(12,8) //some values won't work, always check timesigActual
                                                              curScore.startCmd()
                                                              c.add(ts)
                                                              curScore.endCmd()
                                                            }
                                                          }

                                                          log score information entered in File>Properties or new score wizard

                                                          'name' of default score properties

                                                          import MuseScore 3.0
                                                          MuseScore {
                                                            menuPath: "Plugins.debug31"
                                                            onRun:{
                                                              console.log(curScore.metaTag("workTitle")) //https://github.com/fp22june/MuseScoreTag362/blob/master/share/templates/My_First_Score.mscx#L19-L29
                                                            }
                                                          }

                                                          Add text, symbols, and articulation to selected note

                                                          see also TempoChanges Plugin
                                                          sym, SymId enum: see Master palatte > symbols or lookup
                                                          MS3 fontfamily
                                                          lookup codepoints
                                                          everything in musescore.qrc
                                                          only icon image
                                                          source post

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug30"
                                                            pluginType:"dock"  
                                                            onRun: {
                                                              var c=curScore.newCursor()
                                                              c.inputStateMode=Cursor.INPUT_STATE_SYNC_WITH_SCORE
                                                              //
                                                              var s = newElement(Element.ARTICULATION); 
                                                              s.symbol = "articAccentAbove" // see SymId enumeration values
                                                              curScore.startCmd()
                                                              c.add(s)
                                                              curScore.endCmd()
                                                              //
                                                              var sym = newElement(Element.SYMBOL);
                                                              sym.symbol = "miscEyeglasses"
                                                              curScore.startCmd()
                                                              c.add(t)
                                                              curScore.endCmd()
                                                              //
                                                              var t = newElement(Element.STAFF_TEXT); 
                                                              t.fontSize= 20
                                                              t.text = "<sym>miscEyeglasses</sym>" 
                                                              curScore.startCmd()
                                                              c.add(t)
                                                              curScore.endCmd()
                                                            }
                                                            Column{
                                                              Text{
                                                                font.family: 'MScore Text' //also  Bravura  Leland  //https://github.com/musescore/MuseScore/tree/master/fonts
                                                                font.pointSize: 20
                                                                text:"\uE4E5" //https://github.com/w3c/smufl/blob/gh-pages/metadata/glyphnames.json
                                                              }
                                                              Image{
                                                                source:"qrc:///data/icons/note-longa.svg" //https://github.com/musescore/MuseScore/blob/3.x/mscore/icons.cpp#L40
                                                              }
                                                            }
                                                          }

                                                          Save custom data

                                                          The following snippet saves a string as tag property in a score, to save object use JSON.stringify() and parse()
                                                          Also:
                                                          Save data to a time position: add invisible Staff Text, more info study the MuseScore Navigation plugin
                                                          Save data across sessions, use Settings { }, study the Daily Log plugin

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug24"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            onRun:{
                                                              curScore.setMetaTag('customdataname', 'initemptyvalue')
                                                            }
                                                            Column{
                                                              Button{
                                                                text:"load"
                                                                onClicked: console.log( curScore.metaTag('customdataname') )
                                                              }
                                                              Button{
                                                                text:"save"
                                                                onClicked: curScore.setMetaTag('customdataname', 'customdatavalue')
                                                              }
                                                            }
                                                          }

                                                          workaround to gate onScoreStateChanged's cpu-heavy code to the last plugin instance

                                                          Following limits cpu-heavy, blocking synchronous code to last plugin instance (because every onScoreStateChanged continues to run even after its invocation plugin window closed)
                                                          Remember to use unique string in metaTag('PluginLastInstance')
                                                          To test, comment out the comparison line then reopen plugin few times

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug43"
                                                            property string instanceStamp:Date.now()
                                                            Component.onCompleted: curScore.setMetaTag('PluginLastInstance', instanceStamp) //save to score, overwritten by latest plugin
                                                            function blockingSynchronousCode(){
                                                              var x=0
                                                              for(var i=0;i<1e7;i++) x+=i //edit 1e7 according to cpu
                                                            }
                                                            onScoreStateChanged:{
                                                              if(curScore.metaTag('PluginLastInstance')==instanceStamp){   //filter out old instances
                                                                blockingSynchronousCode()
                                                              }
                                                            }
                                                          }

                                                          workaround to relink onScoreStateChanged to current score only

                                                          Using the gate method above, if the plugin window stays open, switching to another score will invalidate onScoreStateChanged because instanceStamp doesn't exist or doesn't equal to plugin's stored value. Click button to reapply stamp so that plugin is affected by current score's onScoreStateChanged
                                                          Remember to use unique string in metaTag('PluginLastInstance')

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore {
                                                            menuPath: "Plugins.debug44"
                                                            pluginType: "dock"
                                                            anchors.fill:parent
                                                            property string instanceStamp:Date.now()
                                                            function maincode(){
                                                              txt.text=instanceStamp+' score called '+Date.now()
                                                            }
                                                            function ownInstance(){
                                                              instanceStamp=Date.now()
                                                              curScore.setMetaTag('PluginLastInstance', instanceStamp)
                                                              maincode()
                                                            }
                                                            Component.onCompleted: ownInstance()
                                                            onScoreStateChanged:{
                                                              if(curScore.metaTag('PluginLastInstance')==instanceStamp){ 
                                                                maincode()
                                                              }
                                                            }
                                                            Column{
                                                              Button{
                                                                text:"relink to current score"
                                                                onClicked:ownInstance()
                                                              }
                                                              Text{
                                                                id: txt
                                                                anchors.fill:parent
                                                              }
                                                            }
                                                          }

                                                          Listview with unidirectional dataflow

                                                          qt ref

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore {
                                                            menuPath: "Plugins.debug22"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            id:pluginscope
                                                            property var db:[
                                                                { nm : "name1" , btn : true }
                                                              , { nm : "name2" , btn : false }
                                                              , { nm : "name3" , btn : false }
                                                              , { nm : "name4" , btn : true }
                                                            ]
                                                            function gen(payload){
                                                              if(payload && payload.deletenm){
                                                                for (var i=0; i<pluginscope.db.length; i++){
                                                                  if(pluginscope.db[i].nm==payload.deletenm){
                                                                    pluginscope.db[i].removed=true
                                                                  }
                                                                }
                                                              }
                                                              if(payload && payload.renewall){
                                                                pluginscope.db=pluginscope.db.map(function _(r){
                                                                  return ({ nm: r.nm, btn: r.btn, removed: false})
                                                                })
                                                              }
                                                              md1.clear()
                                                              pluginscope.db.map(function _(r){
                                                                if(!r.removed) md1.append(r)
                                                              })
                                                              console.log("gen")
                                                            }
                                                            Item{
                                                              anchors.fill: parent
                                                              ListModel { id: md1 }    //ref from delegate use getview1.ListView.view.model
                                                              ListView {
                                                                anchors.fill: parent
                                                                id: listview1         //ref from delegate use getview1.ListView.view
                                                                model: md1  
                                                                delegate: Component {
                                                                  Row{
                                                                    id: getview1
                                                                    width: parent.width
                                                                    Text{
                                                                      clip:true
                                                                      text: nm
                                                                    }
                                                                    Button { 
                                                                      text: btn ? "logmynm" : "deleteme"
                                                                      onClicked:{ 
                                                                        if(btn){ 
                                                                          console.log(nm)
                                                                        } else {
                                                                          gen({ deletenm : nm })
                                                                        }
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                              }
                                                            }
                                                            Button { 
                                                              anchors.bottom: parent.bottom
                                                              text: "renewall"
                                                              onClicked: gen({ renewall : true })
                                                            }
                                                          }

                                                          QML keyboard handler

                                                          more info see this QML notes
                                                          Keys enum list
                                                          focus:true may not mean want you think

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug10"
                                                            pluginType: "dock"
                                                            Item {
                                                              focus:true
                                                              Keys.onPressed: {
                                                                console.log("event.key: "+event.key)
                                                                if (event.key == Qt.Key_Space) cmd("play")
                                                              }
                                                            }
                                                          }

                                                          Add components dynamically eg add clickable buttons

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug50"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            Column{
                                                              anchors.fill: parent
                                                              id:btnscontainer 
                                                            }
                                                            Component { id: btntemplate 
                                                              Button { 
                                                                width: parent.width
                                                              }
                                                            }
                                                            Component.onCompleted:{
                                                              btntemplate.createObject(btnscontainer,{text:'log1'})
                                                                .clicked.connect(function(){console.log('logged1')})
                                                              btntemplate.createObject(btnscontainer,{text:'log2'})
                                                                .clicked.connect(function(){console.log('logged2')})
                                                            }
                                                          }

                                                          Add components dynamically with non static var (data binding)

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore {
                                                            menuPath: "Plugins.debug54"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            implicitHeight: 9999
                                                            Column{
                                                              id:maincontainer
                                                              anchors.fill:parent ;    padding:5;
                                                              Row{ id:rowtoftext }
                                                            }
                                                            Component { id: texttemplate 
                                                              Text{ 
                                                                color:'green'
                                                                topPadding:5
                                                                property var fs   // to dynamically overwrite font.pointSize
                                                                font.pointSize: fs||this.font.pointSize
                                                                font.weight:Font.Medium
                                                              }
                                                            }
                                                            Text{ id:normaltext }   //reference
                                                            Component.onCompleted:{
                                                              texttemplate.createObject(rowtoftext,{
                                                                 text:'Extend'
                                                                ,rightPadding:10
                                                                ,leftPadding:Qt.binding(function(){return parent.width*.3 }) // use Qt.binding for non-static var , otherwise assigned at createObject( ) invocation
                                                              })
                                                              texttemplate.createObject(rowtoftext,{
                                                                 text:'Musescore'
                                                                ,color:'blue'
                                                                ,topPadding:0
                                                                ,fs: normaltext.font.pointSize*1.5
                                                              })
                                                            }
                                                          }

                                                          Popup a modal window

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          import QtQuick.Dialogs 1.1
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug51"
                                                            pluginType: "dock"
                                                            id: pluginscope
                                                            anchors.fill: parent
                                                            //
                                                            Component { id: msg ; MessageDialog { title: "Confirm"; standardButtons: StandardButton.Ok; onAccepted: console.log("ok") } }
                                                            function confirm(t){ msg.createObject(pluginscope,{ text:t, visible: true}) }
                                                            //
                                                            Button { 
                                                              width: parent.width
                                                              text:"MuseScore"
                                                              onClicked: confirm('Rocks')
                                                            }
                                                          }

                                                          Button color, mouse over color

                                                          more prop like disabled, qmlssed, checked, checkable, focused, highlighted, flat, mirrored, hovered etc
                                                          for more mouse control like detect button, QML use MouseArea , see this QML notes

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug6"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            Button{ 
                                                              text:"clickme"
                                                              onClicked: onbtn1()
                                                              background: Rectangle {
                                                              color: parent.hovered ? "#aaa": "#ddd"
                                                              } 
                                                            }
                                                            function onbtn1(){
                                                              console.log("clicked")
                                                            }
                                                          }

                                                          mouse button, mouse down, mouse up

                                                          Mouse button enum list
                                                          also see this QML notes
                                                          for complex mouse handler logic, you may want to use standard js mouseevent as in the WebEngine snippet, instead of QML mouseevent shown here

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2 
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug90"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            Row{
                                                              Rectangle { 
                                                                width:  50;
                                                                height: 50;
                                                                color: "red"
                                                                MouseArea{
                                                                  id:ma
                                                                  anchors.fill: parent
                                                                  acceptedButtons: Qt.LeftButton | Qt.RightButton
                                                                  onPressed: {
                                                                    console.log('MouseArea.pressedButtons: '+ pressedButtons) //pressedButtons is also available ma.pressedButtons
                                                                    console.log('mouse.button: '+mouse.button)                //mouse is mouseEvent exist inside onPressed(){} 
                                                                  }
                                                                }
                                                              }
                                                              Rectangle { 
                                                                width:  50;
                                                                height: 50;
                                                                color: "blue"
                                                                MouseArea{
                                                                  anchors.fill: parent
                                                                  acceptedButtons: Qt.LeftButton
                                                                  z:2
                                                                  onPressed:{
                                                                    mouse.accepted=false
                                                                    console.log('pressed')
                                                                  }
                                                                }
                                                                MouseArea{
                                                                  anchors.fill: parent
                                                                  acceptedButtons: Qt.LeftButton
                                                                  z:-1
                                                                  onReleased:{
                                                                    console.log('released')
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }

                                                          Setup a timeout countdown timer for delayed function

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug52"
                                                            pluginType: "dock"
                                                            id: pluginscope
                                                            anchors.fill: parent
                                                            //
                                                            property var timeout
                                                            Component { id: setTimeout ; Timer {  } }
                                                            //
                                                            Button { 
                                                              width: parent.width
                                                              text:"Delayed"
                                                              onClicked:{
                                                                console.log('promise')
                                                                setTimeout.createObject(pluginscope,{ interval:1000 ,running:true  })
                                                                  .triggered.connect(function(){ console.log('delivered') })
                                                              }
                                                            }
                                                          }

                                                          Debounce

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug53"
                                                            pluginType: "dock"
                                                            id: pluginscope
                                                            anchors.fill: parent
                                                            //
                                                            property var timeout
                                                            Component { id: setTimeout ; Timer {  } }
                                                            function debounced(curryt,curryf){
                                                              return function(obj){
                                                                if(timeout) timeout.stop()
                                                                timeout=setTimeout.createObject(pluginscope,{
                                                                   interval:curryt
                                                                   //,onTriggered:function(){ curryf(obj) }   //?cannot curry?
                                                                  ,running:true
                                                                })
                                                                timeout.triggered.connect(function(){ curryf(obj) })
                                                              }
                                                            }
                                                            //
                                                            property int heavycount:0
                                                            function heavy(){console.log('heavy'+(heavycount++))}
                                                            property var heavydebounced:debounced(500,heavy)
                                                            //
                                                            property int easycount:0
                                                            Button { 
                                                              width: parent.width
                                                              text:"Smash"
                                                              onClicked:{
                                                                console.log('easy'+(easycount++))
                                                                heavydebounced()
                                                              }
                                                            }
                                                          }

                                                          WebEngine = fetch online or local page, or write html, run javascript

                                                          Windows only, see QML notes
                                                          save the following two snippet in the same directory, name the html debug21.html
                                                          also see the other advanced boilerplate below

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          import QtWebEngine 1.5
                                                          MuseScore { 
                                                            menuPath: "Plugins.debug21"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            Column{
                                                              anchors.fill: parent
                                                              Button{
                                                                id:b
                                                                height:30
                                                                text:"clickme"
                                                                onClicked:{
                                                                  v2.runJavaScript('approot.style.background="red"')
                                                                  v3.loadHtml('<div style="background:green;width:100%;height:100%"></div>')
                                                                }
                                                              }
                                                              WebEngineView {
                                                                width: parent.width
                                                                height: (parent.height-b.height)/3
                                                                url: "https://example.com"
                                                              }
                                                              WebEngineView {
                                                                id:v2
                                                                width: parent.width
                                                                height: (parent.height-b.height)/3
                                                                url: "debug21.html"
                                                              }
                                                              WebEngineView {
                                                                id:v3
                                                                width: parent.width
                                                                height: (parent.height-b.height)/3
                                                              }
                                                            }
                                                          }

                                                          debug21.html

                                                          <div id="approot" style="width:100%;height:100%"></div>

                                                          WebEngine + WebChannel = hybrid UI html css js

                                                          Windows only, see QML notes
                                                          save the following two snippet in the same directory, name the html debug19.html
                                                          advice: if large project, avoid direct mutations will help prevent nightmare
                                                          also see the other simpler boilerplate above

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          import QtWebEngine 1.5
                                                          import QtWebChannel 1.0
                                                          MuseScore{
                                                            menuPath: "Plugins.debug19"
                                                            pluginType: "dock"
                                                            anchors.fill: parent
                                                            QtObject {
                                                              id: backendobj
                                                              WebChannel.id: "backendid"
                                                              property string backp: "nothing"
                                                              signal post(string payload)
                                                              function backf(payload){
                                                                backconsole.text = "From front f: " + payload +'\n'+ backconsole.text
                                                                return (payload+110)
                                                              }
                                                            }
                                                            Column{
                                                              anchors.top: wv.bottom
                                                              spacing: 6
                                                              Button {
                                                                height: 12
                                                                text: "Cast signal backendobj.post"
                                                                onClicked: { backendobj.post(201319) }
                                                              }
                                                              Button {
                                                                height: 12
                                                                text: "Direct javascript"
                                                                onClicked:{wv.runJavaScript(""
                                                                  + "   var t=document.querySelector('textarea').value;    "
                                                                  + "   document.querySelector('textarea').value = 'Direct javascript: 394' +'\\n'+ t;   "
                                                                )}
                                                              }
                                                              Button {
                                                                height: 12
                                                                text: "Read backendobj.backp"
                                                                onClicked: { backconsole.text = backendobj.backp +'\n'+ backconsole.text }
                                                              }
                                                              Text {
                                                                id: backconsole
                                                                text: "BackConsole"
                                                                //onTextChanged: backendobj.post("BackConsoleCB")
                                                              }
                                                            }
                                                            WebChannel {
                                                              id: channel
                                                              registeredObjects: [backendobj]
                                                            }
                                                            WebEngineView {
                                                              id: wv
                                                              width: parent.width
                                                              height: parent.height/2
                                                              url: "debug19.html"
                                                              webChannel: channel
                                                              onJavaScriptConsoleMessage: function(w,s,l,i){ console.log('Web console line '+l+' : '+s) } //pipe console
                                                            }
                                                          }

                                                          debug19.html

                                                          <button onclick="frontf()">Front f</button>
                                                          <button onclick="backendobjread()">Direct backendobj.back read</button>
                                                          <button onclick="backendobjwrite()">Direct backendobj.back write</button>
                                                          <textarea id="debug" style="width:100%;height:60%"></textarea>
                                                          <script src="qrc:///qtwebchannel/qwebchannel.js"></script>
                                                          <script>
                                                              var backend
                                                              window.onload = function _(){
                                                                  new QWebChannel(qt.webChannelTransport, channel=>{
                                                                      backend = channel.objects.backendid;
                                                                      backend.post.connect(payload=>{
                                                                          debug.value = ("Signal from backendobj.post: "+payload) +'\n'+ debug.value
                                                                      })
                                                                  })
                                                              }
                                                              // async backend.func and callback
                                                              var frontf = _=>{ 
                                                                backend.backf( 721 , r=>{
                                                                  debug.value = ("Back f CB: "+r) +'\n'+ debug.value 
                                                                })
                                                              }
                                                              // direct read/write backend.prop 
                                                              var backendobjread  = _=> debug.value = backend.backp +'\n'+ debug.value
                                                              var backendobjwrite = _=> backend.backp = new Date() 
                                                          </script>

                                                          loop thru all channel, mute all

                                                          see also this note

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug64"
                                                            function iterCh(cb){
                                                              var parts = curScore.parts
                                                              for (var i = 0; i < parts.length; i++) {
                                                                  var instrs = parts[i].instruments
                                                                  for (var j = 0; j < instrs.length; j++) {
                                                                      var channels = instrs[j].channels
                                                                      for (var k = 0; k < channels.length; k++) {
                                                                          cb(parts[i],instrs[j],channels[k], i,j,k)
                                                                      }
                                                                  }
                                                              }
                                                            }
                                                            onRun:{
                                                              iterCh(function _(p,i,c, n,m,k){ 
                                                                c.mute=true
                                                              })
                                                            }
                                                          }

                                                          log OS name, start another program commandline such as python

                                                          see the BandInMuseScore plugin and receiving / passing MuseScore command line parameter.
                                                          TIPS: use Score's path, see api and Batch Convert

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            anchors.fill: parent
                                                            menuPath: "Plugins.debug42"
                                                            QProcess { id: proc }
                                                            onRun:{
                                                              console.log('os: '+Qt.platform.os)
                                                              var c
                                                              switch (Qt.platform.os){
                                                                case "windows":
                                                                  c = 'cmd /c calc'
                                                                  break;
                                                                default:
                                                                  c = '/bin/sh -c calc'
                                                              }
                                                              proc.start(c)
                                                              var val=proc.waitForFinished(5000)
                                                              // DEBUG
                                                              try {
                                                                var out=proc.readAllStandardOutput()
                                                                console.log("-- Command output: "+out)
                                                                if (val) {
                                                                  console.log('terminated correctly.')
                                                                } else {
                                                                  console.log('failure')
                                                                }
                                                              } catch (err) {
                                                                console.log("--" + err.message);
                                                              }
                                                           }
                                                          }

                                                          Identify if the score is displayed in "Concert pitch" or "Score pitch"

                                                          This can be achieved by comparing the .tpc1 and .tpc2 value of a note of a transposing instrument.

                                                          Rational:

                                                          The note.tpc1 is the Concert pitch representation of a note.
                                                          The note.tpc2 is the Score pitch representation of a note.
                                                          The note.tpc is the representation of the note in the current mode.

                                                          For a transposing instrument tpc1 and tpc2 are different. So they can be compared to tpc and the current mode deduced.

                                                          For a non transposing instrument tpc1 and tpc2 are equal. So the current mode cannot be deduced.

                                                          import QtQuick 2.0
                                                          import MuseScore 3.0
                                                           
                                                          MuseScore {
                                                                menuPath: "Plugins.pluginName"
                                                                description: "Description goes here"
                                                                version: "1.0"
                                                                onRun: {
                                                                      // assuming a note of a transpoing instrument is selected
                                                                      var note=curScore.selection.elements[0];
                                                                      console.log((note.tpc===note.tpc1)?"Concert Pitch":"Score pitch");
                                                                      }
                                                                }

                                                          Identify an instrument transposition

                                                          This can be achieved by comparing the .tpc and .tpc1 value of a note of a transposing instrument.

                                                          Rational

                                                          The note.tpc1 is the Concert pitch representation of a note.
                                                          The note.tpc2 is the Score pitch representation of a note.

                                                          import QtQuick 2.0
                                                          import MuseScore 3.0
                                                           
                                                          MuseScore {
                                                                menuPath: "Plugins.pluginName"
                                                                description: "Description goes here"
                                                                version: "1.0"
                                                                onRun: {
                                                           
                                                                      var note=curScore.selection.elements[0];  // assuming a note is selected
                                                                      console.log("Instrument's transposition: %1 semtitones".arg(deltaTpcToPitch(note.tpc1,note.tpc2)));
                                                                      }
                                                           
                                                                function deltaTpcToPitch(tpc1, tpc2) {
                                                                      var d = ((tpc2 - tpc1) * 5) % 12;
                                                                          //if (d < 0) d += 12;
                                                                      return d;
                                                                      }
                                                                }

                                                          setup keyboard shortcut in MuseScore from QML

                                                          Better use Plugin Manager's "Define Shortcut" instead, because running the following code more than once will bug out that key until restart.
                                                          Source post.
                                                          Workaround forum post by matt28.

                                                          import MuseScore 3.0
                                                          import QtQuick 2.6
                                                          import QtQuick.Window 2.2
                                                          MuseScore {
                                                              id: plugin
                                                              pluginType: "dock"
                                                              readonly property var window: Window.window
                                                              Item { 
                                                                id: someItem 
                                                                focus:true
                                                              }
                                                              Shortcut {
                                                                  sequence: "Ctrl+D"
                                                                  context: Qt.ApplicationShortcut
                                                                  onActivated: {
                                                                      plugin.window.requestActivate();
                                                                      someItem.forceActiveFocus();
                                                                  }
                                                              }
                                                          }

                                                          External links

                                                          Element Analyser plugin which aims to provide a reusable library

                                                          License and credits for this page only

                                                          License info are for legal purpose of this webpage only.
                                                          These are copied from default plugins and MuseScore files. Some contributor info are missing, please add credits wherever due.
                                                          abc_import.qml
                                                          Based on ABC Import by Nicolas Froment (lasconic)
                                                          Copyright (2013) Stephane Groleau (vgstef)
                                                          colornotes.qml
                                                          Copyright (C) 2012 Werner Schweer
                                                          Copyright (C) 2013-2017 Nicolas Froment, Joachim Schmitz
                                                          Copyright (C) 2014 Jörn Eichler
                                                          notenames-interactive.qml
                                                          Copyright (C) 2012 Werner Schweer
                                                          Copyright (C) 2013 - 2019 Joachim Schmitz
                                                          Copyright (C) 2014 Jörn Eichler
                                                          Copyright (C) 2020 MuseScore BVBA
                                                          notenames.qml
                                                          Copyright (C) 2012 Werner Schweer
                                                          Copyright (C) 2013 - 2020 Joachim Schmitz
                                                          Copyright (C) 2014 Jörn Eichler
                                                          Copyright (C) 2020 Johan Temmerman
                                                          Copyright (C) 2023 Laurent van Roy (parkingb)
                                                          Copyright (C) 2012 Werner Schweer and others
                                                          walk.qml
                                                          jeetee
                                                          Copyright (C) 2012-2017 Werner Schweer
                                                          MuseScore
                                                          Music Composition & Notation
                                                          This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                                                          These are for the WebEngine WebChannel boilerplate:
                                                          msfp
                                                          decovar Declaration of VAR
                                                          source
                                                          GPLv3

                                                          QML boilerplates

                                                          If you are editing qmllearning, please upload a file too so that if the page is overwritten accidentally your code can still be retrieved. Discuss this page at https://musescore.org/en/node/345584

                                                          parkingb

                                                          source post

                                                          • automatic window dimension based on UI content
                                                          • use of the SystemPalette.Active and SystemPalette.Disabled for proper color management
                                                          • Rely on DialogButtonBox for correct button placement
                                                          • use as much as possible native MuseScore translations.
                                                            The latter can be tricky because translations structure differs from MS3 and MS4.
                                                            E.g. for a "title" label:
                                                            text: mscoreMajorVersion > 3 ? qsTranslate("project", "Title") + ":" : qsTranslate("NewWizard", "Title") + ":"
                                                          • automatic execution of code (such as settings management) when the window is closed.

                                                            parkingb1.PNG

                                                            import QtQuick 2.9
                                                            import QtQuick.Controls 2.2
                                                            import QtQuick.Layouts 1.3
                                                            import QtQuick.Dialogs 1.2
                                                            import QtQuick.Window 2.3
                                                            import Qt.labs.settings 1.0
                                                            import MuseScore 3.0
                                                            
                                                            MuseScore {
                                                                menuPath: "Plugins." + qsTr("Plugin Name")
                                                                version: "1.1.0"
                                                                requiresScore: false
                                                                description: qsTr("Create a new score based on exsiting template")
                                                                pluginType: "dialog"
                                                                id: mainWindow // required for setting MS4 properties and closing Window
                                                            
                                                            
                                                                Component.onCompleted: {
                                                                    // Specific MS4 features
                                                                    if (mscoreMajorVersion >= 4) {
                                                                        mainWindow.title = qsTr("Plugin Name");
                                                                        mainWindow.thumbnailName = "logo.png";
                                                                        // mainWindow.categoryCode = "some category";
                                                                    }
                                                                }
                                                            
                                                                onRun: {
                                                                    // check MuseScore version
                                                                    if (mscoreMajorVersion < 3) {
                                                                        mainWindow.visible = false
                                                                            versionError.open()
                                                                    }
                                                            
                                                                }
                                                            
                                                                // Compute dimension based on content
                                                                width: mainRow.implicitWidth + extraLeft + extraRight
                                                                height: mainRow.implicitHeight + extraTop + extraBottom
                                                                
                                                                property int extraMargin: mainRow.anchors.margins ? mainRow.anchors.margins : 0
                                                                property int extraTop: mainRow.anchors.topMargin ? mainRow.anchors.topMargin : extraMargin
                                                                property int extraBottom: mainRow.anchors.bottomMargin ? mainRow.anchors.bottomMargin : extraMargin
                                                                property int extraLeft: mainRow.anchors.leftMargin ? mainRow.anchors.leftMargin : extraMargin
                                                                property int extraRight: mainRow.anchors.rightMargin ? mainRow.anchors.rightMargin : extraMargin
                                                                   
                                                                // Signal onClosing on the main Window. This code is executed when the window closed
                                                                // Rem: this generates some warnings in the plugin editor log, but this is ok
                                                                Connections {
                                                                        target: mainWindow.parent.Window.window
                                                                        onClosing: {
                                                                            // do whatever is required to do when the plugin window is closing such as managing the settings
                                                                            console.log("onClosing: Saving some date to stettings");
                                                                        }
                                                                    }
                                                                
                                                                // UI
                                                                ColumnLayout {
                                                                    id: mainRow // needed for reference in size computing
                                                                    spacing: 2
                                                                    anchors.margins: 0
                                                            
                                                                    // Plugin controls
                                                                    GridLayout {
                                                                        Layout.margins: 20
                                                                        Layout.minimumWidth: 250
                                                                        Layout.minimumHeight: 200
                                                                        columnSpacing: 5
                                                                        rowSpacing: 5
                                                            
                                                                        // debug
                                                                        columns: 1
                                                                        Rectangle {
                                                                            color: "yellow"
                                                                            width: 400
                                                                            height: 300
                                                                        }
                                                            
                                                                    } // GridLayout
                                                            
                                                                    // Buttons
                                                                    DialogButtonBox {
                                                                        Layout.fillWidth: true
                                                                        spacing: 5
                                                                        alignment: Qt.AlignRight
                                                                        background.opacity: 0 // hide default white background
                                                            
                                                                        standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel
                                                            
                                                                        Button {
                                                                            // some non standard button placed on the left side
                                                                            id: special
                                                                            enabled: true // add real enabling test
                                                                            DialogButtonBox.buttonRole: DialogButtonBox.ResetRole
                                                                            text: qsTr("Special")
                                                                        }
                                                            
                                                                        onAccepted: {
                                                                            //... do the stuff ...
                                                            
                                                                            // and close
                                                                            mainWindow.parent.Window.window.close();
                                                                        }
                                                            
                                                                        onClicked: {
                                                                            if (button === special) {
                                                                                //... do some other stuff ...
                                                                            }
                                                                        }
                                                                        onRejected: mainWindow.parent.Window.window.close();
                                                            
                                                                    } // DialogButtonBox
                                                            
                                                                    // Status bar (delete if not needed)
                                                                    RowLayout {
                                                                        Layout.fillWidth: true
                                                                        Layout.preferredHeight: txtStatus.height
                                                                        Layout.margins: 5
                                                                        spacing: 5
                                                            
                                                                        Text {
                                                                            id: txtStatus
                                                                            text: "some status"
                                                                            wrapMode: Text.NoWrap
                                                                            elide: Text.ElideRight
                                                                            maximumLineCount: 1
                                                                            Layout.fillWidth: true
                                                                        }
                                                                    } // status bar
                                                            
                                                                } // ColumnLayout
                                                            
                                                                // Plugin settings
                                                                Settings {
                                                                    id: settings
                                                                    category: "MyPlugin"
                                                                    // use alias on whatever UI controls
                                                                    //property alias subtitle: subtitle.text
                                                                    //property alias composer: composer.text
                                                                    //property alias lyricist: lyricist.text
                                                                    //property alias copyright: copyright.text
                                                                }
                                                            
                                                                // Palette for nice color management
                                                                SystemPalette {
                                                                    id: sysActivePalette;
                                                                    colorGroup: SystemPalette.Active
                                                                }
                                                                SystemPalette {
                                                                    id: sysDisabledPalette;
                                                                    colorGroup: SystemPalette.Disabled
                                                                }
                                                            
                                                                // Version mismatch dialog
                                                                MessageDialog {
                                                                    id: versionError
                                                                    visible: false
                                                                    title: qsTr("Unsupported MuseScore Version")
                                                                    text: qsTr("This plugin requires MuseScore 3.6later.")
                                                                    onAccepted: {
                                                                        mainWindow.parent.Window.window.close();
                                                                    }
                                                                }
                                                            
                                                            } // MuseScore

                                                          qmllearning Dialog

                                                          Demo version 20230227A
                                                          20230227A.gif20230227A.gif

                                                          • automatic window dimension show all content
                                                          • option to set fixed size instead
                                                          • scrollable contentarea
                                                          • does not require UI building pixel by pixel
                                                          • does not use pluginType:Dialog
                                                          • does not use quit or Qt.quit()
                                                          • wrap and reflow Column{ Flow{ Item{} Item{}...}} (need to set a wrap width)

                                                          TODO

                                                          • study parkingb's mainWindow.parent.Window.window.close();
                                                          • Settings{}

                                                          Download: musescore_qmllearning_20230301A.zip

                                                          Overview version 20230227A:
                                                          20230227A_overview.PNG

                                                          View Raw:

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          import QtQuick.Layouts 1.2
                                                          import QtQuick.Dialogs 1.2
                                                          import QtQuick.Window 2.2
                                                          MuseScore {
                                                            menuPath: "Plugins.QMLlearning_Dialog"
                                                            version: "20230301A"
                                                            id: pluginscope
                                                            property real wrapperwidth: 600 // use Screen if you need ratio based ui
                                                            property bool fixsize:false
                                                            property int  pagemargintb:10; property int pagemarginlr:20 // use Screen if you need ratio based ui
                                                            property real customwidth: Screen.desktopAvailableWidth*.2
                                                            property real customheight: Screen.desktopAvailableHeight*.2
                                                            onRun:{
                                                              if(fixsize){
                                                                plugindialog.width =Math.min(customwidth  ,Screen.desktopAvailableWidth)
                                                                plugindialog.height=Math.min(customheight ,Screen.desktopAvailableWidth)
                                                              }else{
                                                                // plugindialog doesn't auto expand by contentItem : qml bug ?
                                                                plugindialog.width =Math.min( Math.max(wrapperwidth, plugincontent.width) ,Screen.desktopAvailableWidth)
                                                                // height is tricky
                                                                setTimeout.createObject(pluginscope,{ interval:1 ,running:true  }).triggered.connect(function(){ 
                                                                  plugindialog.height=Math.min(  grid.height+plugincontent.header.height+plugincontent.footer.height ,Screen.desktopAvailableHeight)
                                                                })
                                                              }
                                                            }
                                                            Component { id: setTimeout ; Timer {  } }
                                                            Dialog { id:plugindialog
                                                              title: "PluginDialog"
                                                              visible:true
                                                              contentItem:Page{ id:plugincontent
                                                                header: ToolBar {  // ToolBar, TabBar, or DialogButtonBox 
                                                                  background: Rectangle { color: "skyblue"}
                                                                  RowLayout{
                                                                    anchors.fill: parent
                                                                    Label{
                                                                      horizontalAlignment: Qt.AlignHCenter
                                                                      verticalAlignment: Qt.AlignVCenter
                                                                      Layout.fillWidth: true
                                                                      text: "header"
                                                                      color: "navy"
                                                                    }
                                                                    ToolButton {
                                                                      text: 'btn1'
                                                                      onClicked: console.log('btn1')
                                                                    }
                                                                    ToolButton {
                                                                      text: 'btn2'
                                                                      onClicked: { console.log('btn2') }
                                                                    }
                                                                    ToolButton {
                                                                      text: 'btn3'
                                                                      onClicked: function(){ console.log('btn3') }
                                                                    }
                                                                  }
                                                                }
                                                                contentItem:Rectangle{ id:pagecontent
                                                                  color: "beige" 
                                                                  Flickable{ 
                                                                    anchors.fill:parent;
                                                                    contentWidth: grid.width; contentHeight: grid.height
                                                                    GridLayout{ id:grid
                                                                      columns: 1
                                                                      Column{ id:allcontent
                                                                        Layout.preferredWidth: pagecontent.width-Layout.leftMargin-Layout.rightMargin 
                                                                        Layout.leftMargin : pagemarginlr; Layout.rightMargin  :pagemarginlr
                                                                        Layout.topMargin  : pagemargintb; Layout.bottomMargin :pagemargintb
                                                                        Column{ id:innercontent
                                                                          width: parent.width
                                                                          //
                                                                          // Contents here
                                                                          Rectangle{ color: "red"         ;height: 20   ;width:parent.width }
                                                                          Rectangle{ color: "green"       ;height: 20   ;width:parent.width /2 }
                                                                          Rectangle{ color: "blue"        ;height: 20   ;width:parent.width /2 }
                                                                          Flow{
                                                                            width: parent.width
                                                                            Rectangle{ color: "cyan"      ;height:50  ;width:50 } //dont' assign width with Flow's width, it will cause infinite loop
                                                                            Rectangle{ color: "yellow"    ;height:50  ;width:50 }
                                                                            Rectangle{ color: "magenta"   ;height:50  ;width:50 }
                                                                            Rectangle{ color: "black"     ;height:50  ;width:50 }
                                                                            Rectangle{ color: "cyan"      ;height:50  ;width:50 }
                                                                            Rectangle{ color: "yellow"    ;height:50  ;width:50 }
                                                                            Rectangle{ color: "magenta"   ;height:50  ;width:50 }
                                                                            Rectangle{ color: "black"     ;height:50  ;width:50 }
                                                                            Rectangle{ color: "cyan"      ;height:20  ;width:20 }
                                                                            Rectangle{ color: "yellow"    ;height:20  ;width:20 }
                                                                            Rectangle{ color: "magenta"   ;height:20  ;width:20 }
                                                                            Rectangle{ color: "black"     ;height:20  ;width:20 }
                                                                            Rectangle{ color: "cyan"      ;height:20  ;width:20 }
                                                                            Rectangle{ color: "yellow"    ;height:20  ;width:20 }
                                                                            Rectangle{ color: "magenta"   ;height:20  ;width:20 }
                                                                            Rectangle{ color: "black"     ;height:20  ;width:20 }
                                                                            Rectangle{
                                                                              color: "purple"
                                                                              height:50; width:parent.parent.width/2  //safe to assign width with id=allcontent's width
                                                                              Text {
                                                                                anchors.fill:parent
                                                                                verticalAlignment: Qt.AlignVCenter
                                                                                text: 'VCenter'
                                                                              }
                                                                            }
                                                                            Rectangle{
                                                                              color: "pink"
                                                                              height:50; width:parent.parent.width/4
                                                                              Text {
                                                                                anchors.centerIn:parent
                                                                                text: 'Centered'
                                                                              }
                                                                            }
                                                                            Button {
                                                                              text: 'btnC'
                                                                              onClicked: function(){ console.log('btnC') }
                                                                            }
                                                                            Text {
                                                                              width:parent.parent.width
                                                                              wrapMode: Text.WordWrap
                                                                              text: "   Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Arcu cursus euismod quis viverra nibh cras. Vulputate enim nulla aliquet porttitor lacus. Sed cras ornare arcu dui. Dui vivamus arcu felis bibendum. Porttitor massa id neque aliquam vestibulum morbi blandit cursus risus. Nullam ac tortor vitae purus faucibus ornare suspendisse sed. Amet porttitor eget dolor morbi. Leo a diam sollicitudin tempor id eu. Vitae semper quis lectus nulla at. Quam adipiscing vitae proin sagittis nisl rhoncus. A erat nam at lectus. Pretium vulputate sapien nec sagittis aliquam malesuada. Rhoncus dolor purus non enim praesent elementum facilisis leo vel. Vestibulum sed arcu non odio euismod lacinia at quis risus. Turpis cursus in hac habitasse platea. Ut consequat semper viverra nam libero justo laoreet sit amet.\n   Hendrerit gravida rutrum quisque non tellus orci ac auctor. Scelerisque purus semper eget duis at tellus at. Suspendisse potenti nullam ac tortor. Adipiscing elit ut aliquam purus sit amet luctus. Massa sed elementum tempus egestas sed sed risus pretium. Risus quis varius quam quisque id. Ut sem nulla pharetra diam sit amet. Fames ac turpis egestas sed tempus. Elit eget gravida cum sociis. Adipiscing at in tellus integer feugiat. Lectus mauris ultrices eros in cursus turpis. Vel fringilla est ullamcorper eget nulla facilisi. At varius vel pharetra vel. Erat velit scelerisque in dictum non consectetur a. Lorem sed risus ultricies tristique nulla aliquet enim tortor at."
                                                                            }
                                                                          }
                                                                          Rectangle{ color: "red"         ;height: 20   ;width:parent.width }
                                                                          Rectangle{ color: "green"       ;height: 20   ;width:parent.width /2 }
                                                                          Rectangle{ color: "blue"        ;height: 20   ;width:parent.width /2 }
                                                                        }
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                                footer: DialogButtonBox { //  ToolBar, TabBar, or DialogButtonBox  // ms3 Page footer is not bugged
                                                                  background: Rectangle { color: "darkgrey"}
                                                                  Button {
                                                                    text: 'OK'
                                                                    DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
                                                                  }
                                                                  Button {
                                                                    text: 'Cancel'
                                                                    DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
                                                                  }
                                                                  onAccepted: { console.log("ok") }
                                                                  onRejected: { console.log("cancel"); plugindialog.visible=false }
                                                                }
                                                              }
                                                              // footer: Item{} // ms3 Dialog bug : Cannot assign to non-existent property "footer"
                                                            }
                                                          }

                                                          Old versions:
                                                          qmllearning_20230227A.qml Add show all content, set fix size, scrollable contentarea
                                                          qmllearning_20230226A.qml
                                                          qmllearning_20230226B.qml : Add show all content (edit: revert back to A, B does not work in ms4)
                                                          qmllearning_20230226C.qml : Add optional set init size (edit: revert back to A, C does not work in ms4)

                                                          qmllearning Dockable

                                                          Same as the above dialog variant but use pluginType: "dock"
                                                          pluginscope.height not working

                                                          Download: musescore_qmllearning_20230301A.zip

                                                          View Raw:

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          import QtQuick.Controls 2.2
                                                          import QtQuick.Layouts 1.2
                                                          import QtQuick.Dialogs 1.2
                                                          import QtQuick.Window 2.2
                                                          MuseScore {
                                                            menuPath: "Plugins.QMLlearning_Dockable"
                                                            version: "20230301A"
                                                            id: pluginscope
                                                            pluginType: "dock"
                                                            property real wrapperwidth: 600 // use Screen if you need ratio based ui
                                                            property int  pagemargintb:10; property int pagemarginlr:20 // use Screen if you need ratio based ui
                                                            property real customwidth: Screen.desktopAvailableWidth*.2
                                                            property real customheight: Screen.desktopAvailableHeight*.2
                                                            onRun:{
                                                              pluginscope.height=Math.min(customheight ,Screen.desktopAvailableWidth)
                                                            }
                                                            Page{ id:plugincontent
                                                              anchors.fill: parent
                                                              header: ToolBar {  // ToolBar, TabBar, or DialogButtonBox 
                                                                background: Rectangle { color: "skyblue"}
                                                                RowLayout{
                                                                  anchors.fill: parent
                                                                  Label{
                                                                    horizontalAlignment: Qt.AlignHCenter
                                                                    verticalAlignment: Qt.AlignVCenter
                                                                    Layout.fillWidth: true
                                                                    text: "header"
                                                                    color: "navy"
                                                                  }
                                                                  ToolButton {
                                                                    text: 'btn1'
                                                                    onClicked: console.log('btn1')
                                                                  }
                                                                  ToolButton {
                                                                    text: 'btn2'
                                                                    onClicked: { console.log('btn2') }
                                                                  }
                                                                  ToolButton {
                                                                    text: 'btn3'
                                                                    onClicked: function(){ console.log('btn3') }
                                                                  }
                                                                }
                                                              }
                                                              contentItem:Rectangle{ id:pagecontent
                                                                color: "beige" 
                                                                Flickable{ 
                                                                  anchors.fill:parent;
                                                                  contentWidth: grid.width; contentHeight: grid.height
                                                                  GridLayout{ id:grid
                                                                    columns: 1
                                                                    Column{ id:allcontent
                                                                      Layout.preferredWidth: pagecontent.width-Layout.leftMargin-Layout.rightMargin 
                                                                      Layout.leftMargin : pagemarginlr; Layout.rightMargin  :pagemarginlr
                                                                      Layout.topMargin  : pagemargintb; Layout.bottomMargin :pagemargintb
                                                                      Column{ id:innercontent
                                                                        width: parent.width
                                                                        //
                                                                        // Contents here
                                                                        Rectangle{ color: "red"         ;height: 20   ;width:parent.width }
                                                                        Rectangle{ color: "green"       ;height: 20   ;width:parent.width /2 }
                                                                        Rectangle{ color: "blue"        ;height: 20   ;width:parent.width /2 }
                                                                        Flow{
                                                                          width: parent.width
                                                                          Rectangle{ color: "cyan"      ;height:50  ;width:50 } //dont' assign width with Flow's width, it will cause infinite loop
                                                                          Rectangle{ color: "yellow"    ;height:50  ;width:50 }
                                                                          Rectangle{ color: "magenta"   ;height:50  ;width:50 }
                                                                          Rectangle{ color: "black"     ;height:50  ;width:50 }
                                                                          Rectangle{ color: "cyan"      ;height:50  ;width:50 }
                                                                          Rectangle{ color: "yellow"    ;height:50  ;width:50 }
                                                                          Rectangle{ color: "magenta"   ;height:50  ;width:50 }
                                                                          Rectangle{ color: "black"     ;height:50  ;width:50 }
                                                                          Rectangle{ color: "cyan"      ;height:20  ;width:20 }
                                                                          Rectangle{ color: "yellow"    ;height:20  ;width:20 }
                                                                          Rectangle{ color: "magenta"   ;height:20  ;width:20 }
                                                                          Rectangle{ color: "black"     ;height:20  ;width:20 }
                                                                          Rectangle{ color: "cyan"      ;height:20  ;width:20 }
                                                                          Rectangle{ color: "yellow"    ;height:20  ;width:20 }
                                                                          Rectangle{ color: "magenta"   ;height:20  ;width:20 }
                                                                          Rectangle{ color: "black"     ;height:20  ;width:20 }
                                                                          Rectangle{
                                                                            color: "purple"
                                                                            height:50; width:parent.parent.width/2  //safe to assign width with id=allcontent's width
                                                                            Text {
                                                                              anchors.fill:parent
                                                                              verticalAlignment: Qt.AlignVCenter
                                                                              text: 'VCenter'
                                                                            }
                                                                          }
                                                                          Rectangle{
                                                                            color: "pink"
                                                                            height:50; width:parent.parent.width/4
                                                                            Text {
                                                                              anchors.centerIn:parent
                                                                              text: 'Centered'
                                                                            }
                                                                          }
                                                                          Button {
                                                                            text: 'btnC'
                                                                            onClicked: function(){ console.log('btnC') }
                                                                          }
                                                                          Text {
                                                                            width:parent.parent.width
                                                                            wrapMode: Text.WordWrap
                                                                            text: "   Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Arcu cursus euismod quis viverra nibh cras. Vulputate enim nulla aliquet porttitor lacus. Sed cras ornare arcu dui. Dui vivamus arcu felis bibendum. Porttitor massa id neque aliquam vestibulum morbi blandit cursus risus. Nullam ac tortor vitae purus faucibus ornare suspendisse sed. Amet porttitor eget dolor morbi. Leo a diam sollicitudin tempor id eu. Vitae semper quis lectus nulla at. Quam adipiscing vitae proin sagittis nisl rhoncus. A erat nam at lectus. Pretium vulputate sapien nec sagittis aliquam malesuada. Rhoncus dolor purus non enim praesent elementum facilisis leo vel. Vestibulum sed arcu non odio euismod lacinia at quis risus. Turpis cursus in hac habitasse platea. Ut consequat semper viverra nam libero justo laoreet sit amet.\n   Hendrerit gravida rutrum quisque non tellus orci ac auctor. Scelerisque purus semper eget duis at tellus at. Suspendisse potenti nullam ac tortor. Adipiscing elit ut aliquam purus sit amet luctus. Massa sed elementum tempus egestas sed sed risus pretium. Risus quis varius quam quisque id. Ut sem nulla pharetra diam sit amet. Fames ac turpis egestas sed tempus. Elit eget gravida cum sociis. Adipiscing at in tellus integer feugiat. Lectus mauris ultrices eros in cursus turpis. Vel fringilla est ullamcorper eget nulla facilisi. At varius vel pharetra vel. Erat velit scelerisque in dictum non consectetur a. Lorem sed risus ultricies tristique nulla aliquet enim tortor at."
                                                                          }
                                                                        }
                                                                        Rectangle{ color: "red"         ;height: 20   ;width:parent.width }
                                                                        Rectangle{ color: "green"       ;height: 20   ;width:parent.width /2 }
                                                                        Rectangle{ color: "blue"        ;height: 20   ;width:parent.width /2 }
                                                                      }
                                                                    }
                                                                  }
                                                                }
                                                              }
                                                              footer: DialogButtonBox { //  ToolBar, TabBar, or DialogButtonBox  // ms3 Page footer is not bugged
                                                                background: Rectangle { color: "darkgrey"}
                                                                Button {
                                                                  text: 'OK'
                                                                  DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
                                                                }
                                                                Button {
                                                                  text: 'Cancel'
                                                                  DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
                                                                }
                                                                onAccepted: { console.log("ok") }
                                                                onRejected: { console.log("cancel") }
                                                              }
                                                            }
                                                          }

                                                          QML notes on WebEngine

                                                          Versions that support WebEngine and WebChannel

                                                          • Origin of WebEngine module library inclusion dates back to MuseScore Connect
                                                          • Musescore 3.6.2 for Windows has WebEngine (and WebChannel) support. Not on Linux and Mac versions.
                                                          • Musescore 4.0 (all platform) uses OAuth. WebEngine support removed Jun2021, see github

                                                          Right click issue

                                                          • It seems WebEngineView unifies left and right mouse button to one event (simplified to a simulated tap?)
                                                          • To disable its context menu upon right mouse button use:
                                                          WebEngineView {
                                                            onContextMenuRequested: request.accepted = true
                                                            //add codes here for DIY menu
                                                          }

                                                          buggy mouse events:

                                                          DOM bubbling exist unexpectedly in these events, also event.target==currenttarget unexpectedly in bubbling

                                                          • mouseenter
                                                          • mouseleave

                                                          It seems WebEngineView always simulate a pen tip drag when mouse movement happens, ie the mouse is always pressed in the following event ( mouseevent.button==0 )

                                                          • mouseover

                                                          Use a WebEngine plus html, css and javascript to build UI (Windows, Musescore 3.6.2 only)

                                                          Use the two boilerplates, which utilize a hybrid view built with html, css and standard javascript thru a 100% width and height WebEngine.

                                                          Inside WebEngine, standard set of javascript is used, for tech compatibility check on caniuse.com (find Chrome v56), eg css display:grid is unsupported. See also WebEngine community notes.

                                                          The following works:

                                                          • javascript
                                                            • Arrow function
                                                            • template-literals ie `string${var}`
                                                            • DOMParser().parseFromString("html")
                                                          • css
                                                            • Flex

                                                          The following css will not work:

                                                          • Gap
                                                          • Grid

                                                          Technical info on WebEngineView, WebChannel, WebView:

                                                          WebEngineView fetches url, search data on html and runs javascript from QML side only, its version in MuseScore 3 (Qt 5.9) is based on Chromium version 56.0.2924.122.
                                                          To communicate bidirectionally between QML and webpage use it with WebChannel.
                                                          WebView 1.1 is an older component and use a different engine which does not offer simple WebChannel support, try WebSocket.

                                                          QML notes on javascript array, inheritance, keyboard and mouse input

                                                          QML list and javascript array

                                                          QML property declaration:

                                                          A list can only store QML objects:

                                                          Item {
                                                              property list aList: [ ]
                                                              aList2: [ ] //shorthand of above
                                                          }

                                                          A list is an object: typeof list == 'object'

                                                          An array is a variant:

                                                          Item {
                                                              property var anArray: [ ]
                                                          }

                                                          _
                                                          inside QML functions:
                                                          same syntax as in standard javascript

                                                          Item {    
                                                              function a(){
                                                                  var anArray=[ ]
                                                              }
                                                          }

                                                          Class/Object inheritance, composition and .prototype

                                                          • Cannot edit class/object as you would with .prototype in javascript, but see component creation.
                                                          • Object.assign() (and spread function) also does not work, as opposed to stated on Qt webpage.

                                                          Setup a QML component to listen for mouse input

                                                          • Mouse button enum list

                                                          • To drag move an overflowed component, also try wrapping it inside a Flickable { }. If you need to set disable mouse in Flickable later , set interactive:false

                                                          • Button emits the signal clicked() canceled(), doubleClicked(), pressed(), released() and pressAndHold(), ref

                                                          • For more control

                                                            • Example snippet
                                                            • Two ways to find out which button is pressed:
                                                              • .pressed .pressedButtons properties of MouseArea
                                                              • mouse.button of MouseEvent inside some listeners function (not all has MouseEvent) eg onPressed:{ if(mouse.button==ENUM) }
                                                            • To capture and propagate mouse events like preventdefault , event.stopPropagation(), return false in javascript:
                                                              • Two types:
                                                                • mouse.accepted=false inside onPressed:{}, onReleased:{} , onWheel:{} to allow propagtion
                                                                • in MouseArea set propagateComposedEvents:true to allow propagtion thru this three listensers: onClicked:{} , onDoubleClicked:{} and onPressAndHold:{} , source
                                                              • QML event behavior seem weird to js dev
                                                                • trigger onPressed:{ mouse.accepted=false } then further handlers in the same MouseArea { } eg onReleased:{} will be ignored , see this post. Workaround: multiple duplicate components
                                                                • to detect hover use hoverEnabled:true + onEntered:{}. Trigger it, then further down some handlers will work eg onPressed:{}, and some will be ignored eg onReleased:{}. Workaround: plz provide
                                                                • trigger any onReleased:{} ,then all further handlers will be ignored. Workaround: arrange it under everything by eg moving code up, or assigning a lower z value
                                                                • no mouse.accepted in onReleased:{}
                                                            • No easy way to do this effect
                                                              • While pressing down a mouse button to trigger onPressed:{}, the mouseEvent is "trapped" by MouseArea, moving to other MouseArea will not trigger their handlers, see this post. Workaround use one MouseArea to wrap components, this post; or QRubberBand ; or mouse move distance calc; or throw awayQtQuick, use WebEngine + WebChannel and standard js mouse events instead

                                                          setup a QML component to listen for keyboard input

                                                          Keys enum list
                                                          QML .focus:true may not mean what you think. see Item.focus and read up on FocusScope { }
                                                          Quick compare .focus, .activeFocus, forceActiveFocus(), FocusScope { }, see this stackoverflow
                                                          example snippet

                                                          related: setup keyboard shortcut in MuseScore from QML example in snippets page

                                                          example snippet

                                                          Use Case: Add Fingering Text

                                                          Background

                                                          I have needed to add fingering text to individual notes. For me this is because when I reformat/resize the staff "Staff Text" doesn't stay associated to, and aligned with, the specific notes I need the text to be next to. But fingering text is specifically associated to individual notes and so, when reformatting a staff, that text does tend to stay in alignment with the notes.

                                                          Procedure

                                                          Because fingering text elements are child elements of individual notes, adding them is a bit different than adding Staff Text, or other elements that you just add at the current cursor location.

                                                          You add fingering as a new element that you add to a specific note object. It is quite simple, as long as you can obtain the desired note object in your code. Below is the procedure:

                                                          //Assume user has selected a single note in the score
                                                          var oNote = curScore.selection.elements[0];
                                                          var finger = newElement(Element.FINGERING);
                                                          finger.text = "FG";
                                                          finger.color = "#aa0000";
                                                          curScore.selection.elements[0].add(finger);
                                                          //Here's an odd thing - you have to set the x,y offset 
                                                          //properties **after** you have added the fingering object 
                                                          //to the note. If you set them prior to adding, like I did
                                                          //for the color above, they don't seem to have any effect.
                                                          //I personally cannot explain this difference in behavior.
                                                          finger.offsetX = 2.00;
                                                          finger.offsetY = -0.44;

                                                           

                                                          When you run the above code on a score where you have selected a single note you will see the (red) text 'FG' appear next to the note.

                                                          Plugin Example

                                                          For a complete plugin example, and a test score to use with it, see:

                                                          Add fingering text plugin
                                                          Score: Test - Add Fingering Text

                                                          References

                                                          Doxygen Documentation for Note | elements

                                                          Use Case: Changing an Existing Note's Pitch

                                                          Background

                                                          What follows are my own learnings while coding a plugin that transforms an existing TAB staff to the TAB numbering convention used by Mountain Dulcimer players. This convention is semi-diatonic, meaning that the fret numbering is not chromatically sequential. For example, chromatically fret #2 would be two half-steps above the open string tuning. On a Mountain Dulcimer fret #2 is 4 half-steps above the open tuning. So to transform the chormatic TAB to Mtn Dulcimer TAB I walk the TAB staff and reduce the pitch of each note so that Musescore, internally, assigns the note to the corresponding Mtn Dulcimer fret number.

                                                          Key learnings

                                                          One might think that there are only 2-degrees of freedom in assigning a fret# - that is, given a pitch and a string there can be only one possible fret# that can be assigned. However, it turns out that you must specify all of the following parameters to successfully change the displayed note. Further - if you do specify all the parameters except for the .tpc1 and .tpc2 values then upon your plugin's completion the modified score may look fine; however, after saving the score and reopening it you will likely find that the changes your plugin made were not saved (the reopened score will show a mix of reverted notes along with random errors). So you must set each of the below parameters:

                                                          note.pitch
                                                          note.fret
                                                          note.string
                                                          note.tpc1
                                                          note.tpc2

                                                           

                                                          Procedure to Determine New .tpc to Match New MIDI Pitch Value

                                                          1. In your code define a two-dimensional array that contains Musescore's tpc mapping. The 2D array is set up as rows, which represents each note's pitch-class, i.e., C, C#, D, D#, E, F, F#, G, G#, A, A#, B, B#. Then each row has three columns which represent each of the three possible variations on how a given note could be represented. E.g., a C could be represented as a B# (tpc value 26), a C (tpc value 14), or a Dbb (tpc value 2). Note that there is a null value in the middle column of pitch class 8, where G# and Ab are the same note; but in this one case there is no 3rd alternative representation. In your array fill this entry with the value ‘NaN.’ See: Tonal Pitch Class Mapping.

                                                          2. Given a TAB note to convert, step-1 is to find which row of your tpc mapping array the existing note’s tpc value matches up to. In my plugin code this is done via brute force, using two nested for loops to search row/column-wise through the tpc array for a value that matches the existing note’s note.tpc value.

                                                          3. You are going to change the note's pitch by some number of steps from the original pitch. Call this amount the "offset" amount. So in my example I want existing fret# 2 to become fret# 1, so I will reduce the note's pitch by 1. So my offset is 1.

                                                          4. Given the tpc array row number, the offset value is then used to move backwards in the tpc array that many rows. To do this you have to think of the array as a closed circle. So when falling off the array into negative index values you have to force a loop-back to the bottom of the array. Likewise, when falling off the end of the array into index values greater than the length of the array you have to loop-back to the start of the array. When you have performed this operation you now have the new pitch class (i.e., the row index) that matches up to your new MIDI pitch value for the note.

                                                          5. Now that you have the offset row you can determine which column is appropriate for your re-pitched note. In my case, for TAB notes, I simply use the original tpc array column since, for TAB, we aren’t actually making any use of the tpc pitch-spelling so we don’t have to worry about that. EXCEPT for one condition - that ‘NA’ condition for G#. We could be moving back to the G#/Ab row, and be set on column 1, which is ‘NA’ - invalid. So we have to sense for this, and if detected, just set the tpc to the G# (that is, value 22).

                                                          6. Finally, the .tpc value you get could represents either the note you want to see on your score ore the note you want to hear when playing. For non transposing instruments, both notes are the same. For transposing instruments those notes are different. E.g. for a saxophone, an "C" on the staff actually sounds as "Bb". This is the difference between "Score pitch" and "Concert pitch". Those are represented at the note level by .tpc1 and .tpc2.
                                                            And you will have to push your .tpc value either to .tpc1 or .tpc2, depending on whether your pitch is the heard pitch or displayed pitch. And then adapt the other .tpc1|2 value accordingly.
                                                            At this stage, one must observe that the .tpc you computed is based on a pitch. So that .tpc is actually representing the heard pitch, i.e. the "Concert pitch". If your intention was to have the displayed pitch, that pitch will have to be corrected before being pushed to the note (see below).

                                                          So 2 cases:

                                                          non transposing instrument

                                                          You can push .tpc to both note.tpc1 and note.tpc2, and your pitch to note.pitch

                                                          note.pitch=pitch;
                                                          note.tpc1=tpc;
                                                          note.tpc2=tpc;
                                                          

                                                          transposing instrument / generic approach

                                                          • retrieving the instrument's transposition:
                                                            From the current note retrieve the current tpc difference:
                                                          var dtpc = note.tpc2 - note.tpc1;
                                                          
                                                          • compute the final pitch, tpc1 and tpc2 values
                                                            If your pitch is the Concert Pitch:
                                                          note.pitch=pitch;
                                                          note.tpc1=tpc;
                                                          note.tpc2=tpc+dtpc;
                                                          

                                                          If your pitch is the Score Pitch:

                                                          var dpitch=deltaTpcToPitch(note.tpc1, note.tpc2)  ; // as the the "note.pitch" is the concert pitch, your pitch (which the score pitch) must be adapted.
                                                          note.pitch=pitch+dpitch;
                                                          note.tpc1=tpc-dtpc;
                                                          note.tpc2=tpc;
                                                          
                                                          // compute the transposition of an instrument based on its .tpc1 and .tpc2
                                                          function deltaTpcToPitch(tpc1, tpc2) {
                                                              var d = ((tpc2 - tpc1) * 5) % 12;
                                                              if (d &lt; 0)
                                                                  d += 12;
                                                              return d;
                                                          }
                                                          

                                                          Code Example

                                                          MtnDulcimer-TransCromoTABtoDiatonic_ver0.3.qml

                                                          References

                                                          Tonal Pitch Class Mapping.

                                                          Issue: Changes to TAB made by PlugIn not saved.

                                                          Use Case: Element Explorer

                                                          Background

                                                          I have found it helpful to be able to click on some item in a score and examine all of it's properties. For example, what are the available properties, and their actual values, for that rest in measure 2? Or what can my plugin obtain from the time signature element?, etc. So I created a plugin that let's me see the key -> value pairs for any element I have selected on a score.

                                                          Usage

                                                          1. Make sure you run the plugin from Musescore's 'Plugin Creator...' as the results are provided using console.log statements.

                                                          2. With the plugin loaded into the plugin creator's window, single-click on any item in the score (you can actually use the ctrl key to select several items at once if you wish).

                                                          3. From the plugin creator, run the plugin. You will get a list of all the available properties, and their current values, for each of the selected items. Note that this plugin is not crawling embedded objects. So, for example, on a note element you'd see the staff property, and it will look something like this: 'staff : Ms::PluginAPI::Staff(0xab55410)'. That is telling you that in your code you would be able to access that object and it's properties and methods. Of course, you should also be able to see this from the formal Doxygen Documentation as well.

                                                          The Plugin

                                                          Obtain plugin from Musescore-Plugin-Docs
                                                          There is also a version that will crawl up the examined object's parent tree: REFcode_ExamineElement-andParents.qml

                                                          Here is the plugin's code:

                                                          //=============================================================================
                                                          //  MuseScore Plugin
                                                          //
                                                          //  This plugin will list to the console window the key -> value pairs for 
                                                          //  individual items (elements) selected on a score. E.g., open a score,
                                                          //  select an individual note, then run this plugin from the Plugin Creator
                                                          //  window to see that note's properties list in the console output.
                                                          //
                                                          //  IF you intend to examine more than a few elements at once you might want
                                                          //  to modify this to have it write the results out to a text file rather
                                                          //  than the console window.
                                                          //
                                                          //  I use this to examine what properties are available to my plugin for a
                                                          //  given element (e.g., what can I learn about a 'note,' or a 
                                                          //  'time signature')?
                                                          //  
                                                          //=============================================================================
                                                           
                                                           
                                                          //------------------------------------------------------------------------------
                                                          //  1.0: 04/24/2021 | First created
                                                          //------------------------------------------------------------------------------
                                                           
                                                          // Am assuming QtQuick version 5.9 for Musescore 3.x plugins.
                                                          import QtQuick 2.0
                                                          import QtQuick.Dialogs 1.1
                                                          import MuseScore 3.0
                                                           
                                                          MuseScore {
                                                              version:  "1.0"
                                                              description: "Examine an Element"
                                                              menuPath: "Plugins.DEV.Examine an Element"
                                                           
                                                              function showObject(mscoreElement) {
                                                                  //    PURPOSE: Lists all key -> value pairs of the passed in
                                                                  //element to the console.
                                                                  //    NOTE: To reduce clutter I am filtering out any 
                                                                  //'undefined' properties. (The MuseScore 'element' object
                                                                  //is very flat - it will show many, many properties for any
                                                                  //given element type; but for any given element many, if not 
                                                                  //most, of these properties will return 'undefined' as they 
                                                                  //are not all valid for all element types. If you want to see 
                                                                  //this comment out the filter.)
                                                           
                                                                  if (Object.keys(mscoreElement).length >0) {
                                                                      Object.keys(mscoreElement)
                                                                          .filter(function(key) {
                                                                              return mscoreElement[key] != null;
                                                                          })
                                                                          .forEach(function eachKey(key) {
                                                                              console.log("---- ---- ", key, " : <", mscoreElement[key], ">");
                                                                          });
                                                                  }
                                                              }
                                                           
                                                          //==== PLUGIN RUN-TIME ENTRY POINT =============================================
                                                           
                                                              onRun: {
                                                                  console.log("********** RUNNING **********\n");
                                                           
                                                                  var oCursor = curScore.newCursor()
                                                           
                                                                  //Make sure something is selected.
                                                                  if (curScore.selection.elements.length==0) {
                                                                      console.log("**** NOTHING SELECTED");
                                                                      console.log("**** Select an element on the score and try again");
                                                                      console.log("****");
                                                                  }
                                                                  //We have a selection, now explode it...
                                                                  else { 
                                                                      var oElementsList = curScore.selection.elements;
                                                                      console.log("");
                                                                      console.log("---- | Number of Selected Elements to Examine: [", oElementsList.length, "]");
                                                                      console.log("");
                                                                      for (var i=0; i<oElementsList.length; i++) {
                                                                          console.log("------------------------------------------------------------------------");
                                                                          console.log("---- Element# [", i, "] is a || ", oElementsList[i].name, " ||");
                                                                          console.log("");
                                                                          showObject(oElementsList[i]);
                                                                          console.log("\n");
                                                                          console.log("---- END Element# [", i, "]");
                                                                          console.log("------------------------------------------------------------------------");
                                                                          console.log("");
                                                                      }
                                                                  }
                                                           
                                                                  console.log("********** QUITTING **********\n");
                                                                  Qt.quit();
                                                           
                                                              } //END OnRun
                                                           
                                                           
                                                          } // END Musescore

                                                           

                                                          References

                                                          Formal Doxygen Plugin Documentation

                                                          Community notes on API

                                                          This section allows any musescore.org user to provide notes on top of the official API documentation, feel free to add your learnings. GitHub account or Doxygen knowledge are not required.

                                                          Time signature

                                                          Working:
                                                          creation example snippet
                                                          See Time Signature Enforcer for a plugin that uses the cmd interface to manipulate the timesigActual of a measure.

                                                          Seems not working:
                                                          the setFraction() function, cannot set measure's "timesigNominal","timesigActual","timesig","timesigGlobal","timesigStretch"

                                                          import MuseScore 3.0
                                                          import QtQuick 2.9
                                                          MuseScore {
                                                            menuPath: "Plugins.debug"
                                                            onRun: {
                                                            var c=curScore.newCursor()
                                                            c.inputStateMode=Cursor.INPUT_STATE_SYNC_WITH_SCORE
                                                            ;["timesigNominal"
                                                            ,"timesigActual"
                                                            ,"timesig"
                                                            ,"timesigGlobal"
                                                            ,"timesigStretch"
                                                            ].map(function _(n){
                                                              console.log('___'+n)
                                                              var p=c.measure[n]    //eg c.measure.timesigNominal
                                                              for (var x in p) console.log(x,": ",p[x]) 
                                                              curScore.startCmd()
                                                              c.measure[n].setFraction( fraction(2,2) )
                                                              curScore.endCmd()
                                                              for (var x in p) console.log(x,": ",p[x])
                                                            })
                                                          }

                                                          Barline

                                                          Changing an existing barline's .barlineType will work as expected, except START_REPEAT
                                                          Applying START_REPEAT changes the next barline instead, see parkingb's comment. The reason: to allow changing END_REPEAT , see source code, workaround: apply START_REPEAT to the previous barline will change current barline.
                                                          Enum not exposed, workaround see jeetee's comment

                                                          Cursor

                                                          This section contains additional information related to the Cursor object.

                                                          Formal Doxygen Documentation for Cursor.

                                                          addNote() and addRest()

                                                          In addition to what is described in the Doxygen documentation, please note the following:

                                                          Each call to cursor.addNote() or cursor.addRest() advances the cursor, by the amount set by cursor.setDuration(), except when the cursor is already at the final beat of the last measure in the score. CAUTION: They do not return falsy value, using cursor advancement logic as loop conditional statement may leads to infinite loop error.

                                                          (Assumption: my guess is that this behaviour occurs because the plugin API is using the underlying C++ code that implements the user-interface for adding notes; and in the context of a human at the keyboard this makes perfect sense. In that case there is no longer any room left for the cursor to advance to. This would generally be true inside a plugin as well; however, if you are walking a staff in a plugin, adding notes, you'd be doing that inside a while-loop and testing for the end of the staff. In this situation failure to trap the final note's non-cursor-advancement may cause an infinite-loop condition.)

                                                          Key signature

                                                          Working:
                                                          cursor.keySignature, see snippet

                                                          Seems not working:
                                                          * curScore.keysig only returns the first key signature at first measure of first staff
                                                          * the functions to get key signature info from a KeySig segment are currently not working
                                                          * creation of new KEYSIG element contains bug

                                                          Musescore 3 internal audio structure

                                                            Hierarchy

                                                            • Score(Full or excerpts(aka File>Parts))
                                                              • Parts
                                                                • Instruments
                                                                  • Channels

                                                            Example 3 parts score

                                                            Horn in F parts[0] .longName
                                                            +Horn in F p.instruments[0] .longName
                                                            ++open p.i.channel[0] .name, .mute, .volume etc
                                                            ++mute p.i.channel[1]
                                                            Piano parts[1]
                                                            +Piano p.instruments[0]
                                                            ++normal p.i.channel[0]
                                                            Violin parts[2]
                                                            +Violin p.instruments[0]
                                                            ++Vln. arco p.i.channel[0]
                                                            ++Vln. pizzicato p.i.channel[1]
                                                            ++Vln. tremolo p.i.channel[2]

                                                            ways to get Part

                                                            element(eg Note/Chord/Segment) .staff.part
                                                            curScore.parts
                                                            score.excerpts[].parts see this post

                                                            part.midichannel vesus instrument.channel

                                                            To mute an instrument without affecting others, use the instrument.channel.mute
                                                            TLDR
                                                            Musescore 3 use one IAC port in MIDI Output. Not to be confused with the Port in Mixer, that Port works internally. See this post
                                                            part.midichannel refers to one of 16 MIDI Output channels, these channels are not exclusive to one sound patch, different MIDI patches may be used in same channel using MIDI BANK SELECT internally when using >16 sounds. if you know src plz add link
                                                            instrument.channel refers to internal channel and one sound, same as defined in instruments.xml, eg buildin violin has 3 channels: arco, pizz, tremolo.

                                                            most properties of Part and Instrument are read only eg cannot set longName

                                                            if you know how to set longName or why disabled plz add

                                                            Note

                                                            This section contains additional information related to the Note object.

                                                            Formal Doxygen Documentation for Note

                                                            tpc, tpc1, tpc2 - Tonal Pitch Class Parameters

                                                            In addition to what is described in the Doxygen documentation, please note the following:

                                                            The Tonal Pitch Class (tpc) parameters of the Note object are used to specify which of the possible enharmonic note spelling variations to display in the score. Based on context, a given note's pitch class may be shown in two or three different ways. For example, a C-natural could be shown, enharmonically, as a B#. To specify which note spelling to use the note object makes use of the three parameters: tpc, tpc1 and tpc2. These parameters store an integer value that maps to a note spelling. See reference below for the mapping table. For example, if middle-C is to be shown as a B# it's Note.pitch value would be 60, and the tpc value would be 26.

                                                            Why are there three tpc parameters?

                                                            I honestly don't have the expertise to be able to answer this with complete confidence. It would appear that tpc1 ('concert pitch') and tpc2 ('transposing pitch') are used to specify potentially different values for different display/print contexts. If the score property 'Display in concert pitch' is checked, then tpc1 is used. Otherwise tpc2 is used. As to tpc (unnumbered) I would guess that it gets dynamically updated internally by Musescore as the Display in concert pitch option is turned on/off so that it represents the current context tpc to use at the moment. However, the formal plugin documentation says this parameter is writable, which makes no sense to me if my guess about this is correct.

                                                            Why care?

                                                            One reason, obviously, is that you may need to obtain the intended note spelling within your plugin.

                                                            Another, perhaps more important, reason is that if you are modifying note pitches in a score you must also set values for tpc1 and tpc2. If you fail to set those values the modified score may look fine upon plugin completion. However, after saving the score and reopening it you will likely find that the note pitch changes your plugin made were not saved (the reopened score will show a mix of reverted notes along with random errors). Also note that if you are changing a note's pitch on a TAB staff you must set all of .ptich, .string, .fret, .tpc1, and .tpc2. From my experience it appears that you do not need to explicitly set the (unumbered) .tpc value.

                                                            References

                                                            Use Case: Changing an Existing Note's Pitch

                                                            Tonal Pitch Class Mapping.

                                                            More Good Info & Example Plugin

                                                            Issue: Changes to TAB made by PlugIn not saved.

                                                            Pitches and octave designations, Enharmonic equivalence

                                                            Score

                                                            This section contains additional information related to the Score object.

                                                            Formal Doxygen Documentation for Cursor.

                                                            score.startCmd() | score.endCmd()

                                                            In addition to what is described in the Doxygen documentation, please note the following:

                                                            In some cases you need to wrap your score modifications with calls to score.startCmd() and score.endCmd(). As explained in a reply to the below referenced forum post: "If you don't, then the Plugin API is not obliged to fully process that command before continuing onwards. So whenever you need to rely on the result of a score-changing action to start a different kind of action (or ask information about the result) make sure to wrap said action(s) between a start/endCmd call." One example of when you need to do this is when you call score.appendMeasures() - per the below referenced post.

                                                            References

                                                            Forum Post: How to change the bar line type of a measure

                                                            Appendix A | Converting Musescore 2 Plugins

                                                            Almost all of the needed changes can also be made automatically with this converter script (Python is needed to run it).

                                                            A detailed set of porting instructions can be found at html/plugin2to3.html

                                                            Plugins for 4.x

                                                            This chapter is for MuseScore 4 plugin developers. To fork the main program, visit the main sections in Developers' handbook.
                                                            For info on what plugins are, how to install and use them, visit Musescore 4 handbook plugin chapter.

                                                            Porting 3.x plugins to Musescore 4

                                                            Plugin system change coming up in 4.x, see github issue and graffesmusic's comment .

                                                            Some plugins have been ported to or created for Mu4:

                                                            • This list (Plugins in the repository marked as being available for 4.x)
                                                            • Batch Convert (not really working though, except for the UI)

                                                            Some plugins have been ported to or created for Mu4.4 (Qt6):

                                                            • PruneStack by rob@birdwellmusic.com https://musescore.org/en/node/367573

                                                            Tips for adapting plugins for 4.x

                                                            Volatile: prone to become outdated as the plugin API changes
                                                            Last updated: 31st Aug 2024

                                                            1. Have your plugin and all its dependencies (if any) in its own subfolder (example)

                                                            2. In the plugin file itself, add the new MuseScore 4 Properties conditionally, for MuseScore 4.0-4.3 and these comments, for MuseScore 4.4, like this, to have the plugin work for MuseScore 3.x, 4.0-4.3 and 4.4:

                                                                //4.4 title: "Some Title"
                                                                //4.4 thumbnailName: "some_thumbnail.png"
                                                                //4.4 categoryCode: "some_category"
                                                                Component.onCompleted: {
                                                                    if (mscoreMajorVersion >= 4 && mscoreMinorVersion <= 3) {
                                                                        title: "Some Title";
                                                                        thumbnailName = "some_thumbnail.png";
                                                                        categoryCode = "some_category";
                                                                    }
                                                                }
                                                             

                                                            If you need it for MuseScore 4 only, use:

                                                                title: "Some Title"
                                                                thumbnailName: "some_thumbnail.png"
                                                                categoryCode: "some_category"
                                                             
                                                            • title is displayed in the Plugin Manager window (Home/Plugins), and makes the plugin easy to find.
                                                            • thumbnailName is the file path to any Plugin logo, also displayed in the Plugin Manager.
                                                              If you add a thumbnail, place it in the plugin subfolder. If no file is provided, a default image will be used in its place.
                                                            • categoryCode assigns the plugin to a specific sub-menu in the plugins tab (Currently available are: "composing-arranging-tools", "color-notes", "playback" and "lyrics").
                                                            1. Place your translations files (if any) in a "translations" folder placed the plugin subfolder.

                                                            2. Remove all occurences of Qt.quit(), else the plugin will crash MuseScore 4!

                                                              • If you don't intend to use the plugin with Mu3, you can replace the Qt.quit() with quit().
                                                                The latter is not supported by Mu3, and will result in an (ignorable) error.
                                                              • If you want to avoid that message and change the Mu3 version as little as possible, use this:
                                                                (typeof(quit) === 'undefined' ? Qt.quit : quit)()
                                                              • Alternatively you could use return, which should work in all MuseScore versions.
                                                            3. The APIs readScore() and writeScore() are not functional in Mu4 (yet).

                                                            4. If your plugin modifies a score, those modifications need to be enclosed by

                                                                curScore.startCmd();
                                                                ...
                                                                curScore.endCmd();
                                                             

                                                            This should be done for Mu3 too, but there is optional, for Mu4 it is mandatory though.

                                                            1. pluginType: "dock" is not working. Changing it to pluginType: "dialog" might work. Even using the methods from step 2 should work, only for Mu4, while keeping "dock" for Mu3

                                                            2. The filePath property isn't working. You could use Qt.resolvedUrl(".").replace("file://", "") instead.

                                                            3. Many of the enums have elements relocated, most notably Sid (style settings, the new Mu4 settings aren't yet exposed), SymId (there are new symbols, and old ones have different locations) and chordRest.beamMode (values have new locations)
                                                              The first call to SymID can take upto 5 seconds!! (some compilation going on?)
                                                              see: https://musescore.org/en/node/364096?page=1#comment-1247486

                                                            4. TextField component from QtQuick.Controls 1.0, must be replaced with the TextEdit component from QtQuick.Controls 2.15 (or from QtQuick.Controls 2.2 if you require compatibility with MuseScore 3). See github issue #19326 for details, source https://musescore.org/en/node/357135

                                                            5. In MU4.4, Qt.labs.settings has been integrated in the Musescore module. The explicit import Qt.labs.settings 1.0 must be removed (it leads to an "Module "Qt.labs.settings" is not installed" error) and is not required for the Settings module to work.

                                                            6. Of the plugin uses RadioButtons, you'd need to replace the ExclusiveGroup type with ButtonGroup (That change may make ther plugin incompatible with MuseScopre versions prior to 4.4)

                                                            REMARKS:

                                                            • These tips are meant to have the plugins working for both MuseScore 3.x and 4.x
                                                            • Even if you follow those steps, the adapted plugins might not even showing up in Mu4's plugins list. If so check the logs for hints (on Windows: "%LOCALAPPDATA%\MuseScore\MuseScore4\logs\").
                                                            • The UI are not always rendering nicely. A lot of text elements shorten to 'somethi...' unreasonably soon, and there is less control over UI styling. Additionally, plugins cannot retain navigation focus, meaning keyboard use is less snappy.
                                                            • QProcess (proc. start ("cmd/c calc")) seems to be unable to run properly in musescore 4.3, windows, see davil123's post
                                                            • playEvents length cap at 1000 reported by JMusicG , compared to 2000 in musescore 3
                                                            • MuseScore Studio 4.4: Plugins must be updated to work with Qt 6 otherwise they won't appear in the Home screen or Plugins menu. See https://github.com/musescore/MuseScore/issues/21659 for details, and https://github.com/musescore/MuseScore/commits/7fe32bacbc9287b716d40462… for the required changes. source: https://musescore.org/en/node/365783
                                                              musescore.org/en/node/367488#comment-1254227
                                                            • tips navigating github Mu4 repo
                                                            • other related threads https://musescore.org/en/node/337463 and https://musescore.org/en/node/367488, the latter esp. about porting to MuseScore 4.4

                                                            Soundfont, MIDI velocity and instruments.xml

                                                              Changes in MuseScore 4

                                                              See and maintain the post at MuseScore 3 features not (yet) implemented in MuseScore 4. The following is a short summary (ms4.2) that may be outdated:

                                                              • added VST support: ability to use sound samples thru a VST sampler (google search) as an alternative to soundfont creation using 3rd party editor.
                                                              • indirect sfz support thru VST see SoundFonts
                                                              • to use custom instrument.xml, add it to score order list 2 https://musescore.org/en/node/341199#comment-1166105
                                                              • Velocity property's range, default value and its effect on playback have been changed, see https://musescore.org/en/handbook/4/dynamics#dynamics-playback
                                                              • MIDI export of percussion instrument changed https://musescore.org/en/node/366882
                                                              • "major percussion overhaul" is coming soon https://musescore.org/en/node/354177

                                                              The following describes Musescore 3

                                                              This page offers Musescore 3 playback related info, instructions on how to use your own sound files inside Musescore, and instruments.xml syntax and definitions. Requires basic understanding of soundfonts

                                                              To setup a new soundfont in Musescore, visit SoundFonts and SFZ files
                                                              To setup instruments in a score, eg add a new violin staff, visit Change Instrument Setup

                                                              Online Resources

                                                              A collection of ready to use new soundfonts for download
                                                              SoundFonts forum on musescore.org

                                                              SF2 specification document

                                                              • Latest version 2.04 pdf from archive.org/creative.com
                                                              • Previous version 2.01 in html

                                                              Use your own sound samples / Create custom soundfont

                                                              Also try the tutorials by Freepats project on its github wiki

                                                              • Obtain sound sample files (eg record with a microphone). If you are making a pitched instrument, obtain notes in three semitone intervals to produce reasonable result eg C Eb F# A.
                                                              • (optional) Normalise samples so they have similar loudness, try Audacity or REAPER(LUFS) more info
                                                              • Choose a sound layout to use, You must use BANK 128 for Unpitched layout eg drumset
                                                              • Bundle into SF2/SF3, see spec, try Polyphone
                                                              • (optional) Add SND support
                                                              • Install it and setup Musescore's synthesizer
                                                              • Open your score, inside Mixer, point any instrument channel to your sound, set Drumset checkbox and config Drumset palette according to your sound layout
                                                              • (optional) Create new instruments using custom instrument.xml (jump to xml overview)
                                                                • to allow articulation/sound sample switching function eg default Staff Text support eg pizz., and
                                                                • to allow easier reuse of the new instruments on multiple scores.
                                                              • Share the good news on the musescore.org soundfonts forum

                                                              Benefit of SF2/SF3 over SFZ : one SF2/SF3 can contain multiple sounds, which makes setting up in MuseScore synthesizer and sharing with other musicians way easier. Convert between SFZ and SF2/SF3 in Polyphone.

                                                              Default dynamics MIDI velocity conversion, MIDI velocity output dB conversion

                                                              Dynamics symbol => MIDI velocity conversion is hardcoded in Musescore. You can also edit any Dynamics Velocity property inside Musescore. Note that this kind of conversion is a matter of program coders' preference ref1 ref2

                                                              MIDI velocity => sound level conversion is defined in soundfont file: the default soundfont is edited with the following dB level aim in mind approximately based on this doc calculated as L(dB) = 40 log (MIDIVelocity/127).

                                                              Observation : Grand piano preset has volume boost (~1.5 LUFS) in Musescore 3.6.2 [ please share src if you find it].

                                                              Volume sliders in the Mixer affect MIDI CC 7.

                                                              Velocity full volume sample dB Musescore 3 Dynamics
                                                              127 0.0dB ffff, fffff, ffffff
                                                              126 fff
                                                              112 -2,2dB ff
                                                              96 - 4.8dB f
                                                              80 - 8.0dB mf
                                                              64 -11.9dB mp
                                                              48 -16,9dB p
                                                              32 -23.9dB pp
                                                              16 -36.0dB ppp
                                                              10 pppp
                                                              8 -48,0dB
                                                              5 ppppp
                                                              4 -60,0dB
                                                              2 -72,1dB
                                                              1 -84.15dB pppppp
                                                              0 -Infinity

                                                              Instrument abstraction in Musescore

                                                              What users can do in a score with soundfont and instrument definition in instruments.xml:

                                                              • Change instrument set-up
                                                              • switch the instrument used by staff
                                                                • permenantly, in Staff / Part properties
                                                                • mid stream, using "Change Instrument" Text
                                                              • change sound (switch Channel) using Staff Text, for each voice of staff, eg pizz.

                                                              What users can do with soundfont alone:

                                                              • switch the sound an existing instrument channel pointing to, using Mixer's Sound dropdown list

                                                              Changing settings inside Musescore will not update instruments.xml automatically.

                                                              Instrument concept in Musescore

                                                              An instrument (jump to xml) in Musescore is a concept including the following:

                                                              • name
                                                              • notation (brackets, barlines, staves, clefs, and noteheads, depending on the type of instrument)
                                                              • behaviors (transposition, playable range)
                                                              • sound (audio samples in the soundfont) thru a layer of Channel concept
                                                              • articulations (playback duration; articulation as in notation)

                                                              it provides a easy way to mix and reuse sound and notation setup. Instruments are defined in instruments.xml

                                                              Channel concept in Musescore

                                                              Not to be confused with MIDI Output Port and Channel.
                                                              Channel (jump to xml) is a concept that represent one specific type of sound produced by a single instrument, alike the articulation/sound sample concept in commercial libraries.
                                                              To simulate different articulation or playing technique of same instrument, you must use a multi-channel instrument. You can only add and remove channel under an instrument by creating a custom instruments.xml, you cannot add or remove channel inside Musescore. Multiple channels of the same instrument can be seen in a folder like manner in the Mixer. eg expand a default violin to see 3 channels: arco, tremolo and pizzicato.
                                                              Total number of channel is unlimited, it is unrelated to number of voices. Each staff (that can contain a clef symbol) has four voices, like a four tracks group concept in DAW. You can assign channel to each voice separately.

                                                              Change sound/articulation sample of an instrument in the middle of your music

                                                              Not to be confused with 'Change Instrument' Text, or other actions, jump to understanding instrument concept for more info

                                                              If your instrument has multiple channels, you can simulate change of performance articulation or playing technique, such as switching between detache and legato for different note:

                                                              • Make sure the instrument has multiple channels defined in instruments.xml
                                                              • Add Staff text. Select a channel for the selected voice, the option texts come each channel's name property (jump to xml). Musescore is shipped with 5 of these: pizz., arco, tremolo, mute, open
                                                              • Jump to Make soundfont support articulation sample switches to understand more.
                                                              • This edited sound switch staff text can be saved and reused

                                                              If you xml has the instrument with Channel name="pizzicato", you'll see inside Musescore:

                                                              Staff text: staff does not means one staff on a score paper in real world sense, it represents the whole instrument. ie. piano have two staffs, Staff text affect the whole piano.

                                                              Musescore's usage of MIDI Bank and Preset number / Two types of sound any instrument channel can point to

                                                              Musescore use MIDI Bank number in a way that seems different from other app and mainstream MIDI keyboards. TIPS: Use an editor that show Bank number directly.

                                                              Two types of sound any instrument channel can point to:

                                                              • Pitched

                                                                • Most comomon
                                                                • Cannot use Drumset palette
                                                                • Musescore3's default soundfont
                                                                  • use different Preset to represent different instruments , it may be from GM
                                                                  • use Bank 0 as default normal sound for each instrument; and
                                                                  • Bank 17 for instruments' Expressive version = Single note dynamic sversion = CC 2 responsive version, see meanings of SND
                                                                • Free to use any Bank and Preset number in your custom soundfont , just make sure instruments.xml's <channel> points to the correct sound.

                                                                Default soundfont's Bank 0 Preset 0 = Piano normal
                                                                Default soundfont's Bank 0 Preset 12 = Marimba normal
                                                                Default soundfont's Bank 0 Preset 24 = Guitar open
                                                                Default soundfont's Bank 0 Preset 41 = Violin arco non expressive (no response to CC)
                                                                Default soundfont's Bank 17 Preset 41 = Violin arco expressive (response to CC 2)

                                                              • Unpitched

                                                                • To use the Drumset palette in Input mode, you must use this sound.
                                                                • <drumset>1</drumset> is equal to Ticking the Drumset checkbox in Mixer
                                                                • each note represent a different sound sample. It may be from Percussion layout in GM
                                                                • <Drum pitch=n> defines the sound sample to be represented by that pitch/note, its staff appearance eg position on staff, notehead etc, and its input keyboard shortcut.
                                                                • Musescore3's default soundfont
                                                                  • Bank 128 includes almost all unpitched percussion instruments
                                                                  • use different Preset for different taste/style.
                                                                • You must use BANK 128 to be listed in Mixer, free to use any Preset number in your custom soundfont, just make sure instruments.xml's <channel> points to the correct sound and <drumset>1</drumset>.

                                                                Default soundfont's Bank128 Preset 0 = Standard Kit
                                                                Default soundfont's Bank128 Preset 16 = Power Kit
                                                                Default soundfont's Bank128 Preset 48 = Orchestra Kit
                                                                Pitch 36=Bass Drum 1
                                                                Pitch 38=Acoustic Snare

                                                              What SND

                                                              Single Note Dynamics (SND) has several different meanings

                                                              Musescore's 'Single Note Dynamics' audio creation mechanism provides:

                                                              • Attack envelope simulation effect (wikipedia) on note playback, eg sfz on violins , for more info see Dynamics
                                                              • simulation of 'variation of loudness' effect eg crescendo on one violin long note, for more info see Hairpins

                                                              It depends on:

                                                              • A soundfont's attenuation response to MIDI CC, jump to Make a soundfont repond to MIDI CC
                                                              • Synthesizer's "Dynamics method" and "CC" setting
                                                              • Instrument notation interpretation setting:
                                                                • for current instrument 'Use single note dynamics' in Staff / Part properties
                                                                • default values, used when adding new instrument to score, are defined in instruments.xml (jump to xml)

                                                              Make a soundfont repond to MIDI CC

                                                              Understand SND first.

                                                              Attenuation response to MIDI velocity and MIDI CC in sounds is a matter of preference of soundfont creators.
                                                              Musescore default soundfont has sounds that response to CC 2, devs call them expressive sounds.
                                                              Musescore synthesizer is set to communicate in CC 2 by default, it is a global setting.
                                                              To allow users to use SND features to compose scores that contains sounds from both default soundfont and custom soundfont, you should make your SF2/SF3 response to CC 2:

                                                              Edit Instrument modulator and/or Preset modulator:

                                                              • Disable default attenuation mod (Note-On velocity),
                                                              • add a MIDI CC 2 attenuation mod,

                                                              study the polyphone screenshot example below, more info visit Polyphone manual, also open and study the modulator in default MuseScore_General.sf3 soundfont.
                                                              In Polyphone's param table, the attenuation use dB values, the meaningful range for 24bit sample is 0 to 144; 16bit: 0to 96; 8bit: 0 to 48 etc, see thread on polyphone forum. The attenuation modulators however use centibel, a 1200 cents based unit, see spec
                                                              cc2.PNG

                                                              SND and soundfont without MIDI CC reponse

                                                              Setup Musescore synthesizer to allow SND feature with soundfont that has no MIDI CC response How to setup Musescore 3.x for correct playback for all dynamics and hairpins (not tested yet, please add info)

                                                              Make soundfont support articulation sample switches (default StaffTexts eg pizz.)

                                                              musescoreTextPalette_2.png
                                                              Change sound sample by using Staff Text, Musescore is shipped with 5 default: pizz., arco, tremolo, mute, open
                                                              They affect playback by sending instructions, which can be viewed by opening any saved .mscx file or exported palette item in plaintext, the name properties refers to an instrument's channel name (jump to xml):

                                                              <StaffText>
                                                                <channelSwitch voice="0" name="pizzicato"/>
                                                                <channelSwitch voice="1" name="pizzicato"/>
                                                                <channelSwitch voice="2" name="pizzicato"/>
                                                                <channelSwitch voice="3" name="pizzicato"/>
                                                                <text>pizz.</text>
                                                              </StaffText>
                                                              <StaffText>
                                                                <channelSwitch voice="0" name="arco"/>
                                                                <channelSwitch voice="1" name="arco"/>
                                                                <channelSwitch voice="2" name="arco"/>
                                                                <channelSwitch voice="3" name="arco"/>
                                                                <text>arco</text>
                                                              </StaffText>
                                                              <StaffText>
                                                                <channelSwitch voice="0" name="tremolo"/>
                                                                <channelSwitch voice="1" name="tremolo"/>
                                                                <channelSwitch voice="2" name="tremolo"/>
                                                                <channelSwitch voice="3" name="tremolo"/>
                                                                <style>Expression</style>
                                                                <text>tremolo</text>
                                                              </StaffText>
                                                              <StaffText>
                                                                <channelSwitch voice="0" name="mute"/>
                                                                <channelSwitch voice="1" name="mute"/>
                                                                <channelSwitch voice="2" name="mute"/>
                                                                <channelSwitch voice="3" name="mute"/>
                                                                <text>mute</text>
                                                              </StaffText>
                                                              <StaffText>
                                                                <channelSwitch voice="0" name="open"/>
                                                                <channelSwitch voice="1" name="open"/>
                                                                <channelSwitch voice="2" name="open"/>
                                                                <channelSwitch voice="3" name="open"/>
                                                                <text>open</text>
                                                              </StaffText>

                                                              For example, to switch to Bank 6 Preset 41 sound upon default pizz. text:

                                                              • Arrange your soundfont in Synthesizer to be at 2nd ordered,if your soundfont is 1st ordered, default instruments will not play correct sound.
                                                              • In instruments.xml, setting up a custom instrument with channels
                                                              <Channel name="customchannel">
                                                                  ...
                                                              </Channel>
                                                              <Channel name="pizzicato">
                                                                <controller ctrl="0" value="1"/><!-- soundfont order - 1 -->
                                                                <controller ctrl="32" value="7"/><!-- soundfont order - 1 +  bank number -->
                                                                <program value="41"/><!-- preset number-->
                                                              </Channel>
                                                              <Channel name="customchannel2">
                                                                  ...
                                                              </Channel>

                                                              If you want alternative soundfont ordering in Synthesizer, you need to modify the value properties accordingly, jump to polyphone demo to learn more.
                                                              You can also create custom staff text save as custom palette item, palette items can be exported and imported.

                                                              instruments.xml

                                                              • defines Instruments (jump to concept, jump to xml)
                                                                • number of channels each instrument has, and
                                                                • the sound each channel points to, and
                                                              • supply GUI layout used in Change instrument set-up menu using Genres (jump to xml) and InstrumentGroup (jump to xml)

                                                              There are two types of sound an instrument channel can point to, see Musescore's usage of MIDI Bank and Preset number

                                                              Create a new instruments.xml, Setup musescore

                                                              • Create a new text file or copy from the the built-in instruments.xml
                                                              • Edit/add new instrument data, save in any directory you like.
                                                              • Setup inside Musescore Preferences

                                                              Modifying instruments.xml will not update score automatically, you must restart musescore, then add the updated version of instrument as new staff, or update a existing staff.

                                                              File directory

                                                              Windows: C:\Program Files\MuseScore 3\instruments

                                                              You may not need to learn the instruments.xml syntax

                                                              Copy and paste method:

                                                              Instrument's notation setting edited and sound assigned in Mixer inside Musescore are not automatically save back to instruments.xml, but they are saved in the score file. Open it as plaintext to copy and paste to create your custom instruments.xml.

                                                              How-to:

                                                              • Edit and finalize your custom soundfonts
                                                              • Load them in synthesizer. If you wish to continue to use musescore default sounds, keep default soundfont as 1st, add your custom soundfonts after it, order as desired, if you wish to use this setup for all score click Set as default.
                                                              • Create a new score, choose an instrument that has notation similar to your custom sound, add it. Open Mixer, select the instrument in Mixer, select your custom sound in Sound dropdown list, set Drumset checkbox in Mixer and config Drumset palette according to your sound layout, save as mscx.
                                                              • Opened mscx as plaintext to copy and paste to create your custom instruments.xml.
                                                              • Add your instruments.xml in Preferences

                                                              Important:
                                                              Do not

                                                              • rearrange Banks and Presets number in your old soundfonts afterwards, or
                                                              • change the order of existing soundfonts in the synthesizer,

                                                              as these may affect what sound your instruments.xml point to. Instead, add new soundfonts by putting them after existing ones.

                                                              instruments.xml syntax definitions

                                                              Element names are case sensitive.

                                                              The museScore element is the container for all of the definitions for all of the instruments.

                                                              museScore element - Genre (optional, multiple)
                                                              museScore element - Articulation (optional, multiple)
                                                              museScore element - InstrumentGroup (optional, multiple)

                                                              Genre

                                                              Genre attribute - id (required)
                                                              The id should be unique. Each instrument element defines the Genre or Genres in which the instrument is used.

                                                              Genre element - name (required)
                                                              Text of item inside dropdown selection menu in instrument setup eg Common.

                                                              Articulation

                                                              As in notation, not referring to sound samples.
                                                              An articulation modifies the velocity (loudness) and or gateTime (length) of a note.

                                                                    <Articulation name="marcatoStaccato">
                                                                              <velocity>120</velocity>
                                                                              <gateTime>50</gateTime>
                                                                    </Articulation>

                                                              Articulation attribute - name (required)
                                                              The name of the Articulation (e.g. staccato). Articulations defined for an Instrument take precedence over Articulations defined in the museScore element for all Instruments*.
                                                              The name should correspond to an entry in the articulations palette:

                                                              staccato, staccatissimo, portato, tenuto, marcato, sforzato (the accent symbol, not the "sfz" dynamics symbol), sforzatoStaccato, marcatoStaccato, marcatoTenuto

                                                              Articulation element - velocity (optional)
                                                              The content is the velocity (loudness) multiplier in percent: 100% leaves the velocity unchanged. The % is optional.

                                                              Articulation element - gateTime (optional)
                                                              The content is the gate time (note length) multiplier in percent: 100% leaves the note length unchanged. The % is optional.

                                                              Articulation element - descr (inactive)
                                                              Currently not used. The description may be helpful for people editing the instruments.xml file in the future.

                                                              InstrumentGroup

                                                              Defines a type of instrument, e.g, Woodwinds, Brass, etc. An Instrument can only be defined in one InstrumentGroup, but it can be included in several InstrumentGroups by cross referencing using the ref element.

                                                                  <InstrumentGroup id="woodwinds">
                                                                      <name>Woodwinds</name>
                                                                      <Instrument id="flute">
                                                                          ....
                                                                      </Instrument>
                                                                      ....
                                                                 </InstrumentGroup>

                                                              InstrumentGroup attribute - id (required)
                                                              The InstrumentGroup id need not be unique within the instruments.xml files. If the id has already been used, then a new InstrumentGroup is not created but the Instruments defined in this element will be added to the previously defined InstrumentGroup.

                                                              InstrumentGroup element - name (required)
                                                              Text of collapsable in instrument setup eg Percussion - Pitched.

                                                              InstrumentGroup element - ref (optional, multiple)
                                                              As of MuseScore 3.6.2, referencing and re-using / re-positioning of instrument is not working.
                                                              The content is the id of an Instrument previously defined. The Instrument will be added to this InstrumentGroup and will appear in both groups. ref can be used in an InstrumentGroup in the instruments.xml file 2 to refer to an instrument in file 1.

                                                              InstrumentGroup element - Instrument (optional, multiple)

                                                              Instrument

                                                              Understanding the instrument concept in Musescore
                                                              MuseScore offers three types of notation (with many variants): standard vocal and instrumental staves, tablatures and unpitched percussion staves. MuseScore interprets two types of sound in soundfont file.

                                                              definitions common to all

                                                              Instrument attribute - id (required)
                                                              The Instrument id must be unique. It is not only used internally but also for identifying the Instrument for the init element in another Instrument and for the ref element in another InstrumentGroup.
                                                              As of MuseScore 3.6.2, referencing and re-using / re-positioning of instrument is not working.

                                                              Instrument element - init (optional)
                                                              The content is the id of an Instrument previously defined. init copies most elements from the referenced Instrument into this Instrument.

                                                              New elements can be added to the instrument and most existing elements can be redefined.

                                                              init does not copy the genres: these should be redefined.

                                                              Redefining staves, bracket, bracketSpans and barlineSpans can have unfortunate effects.

                                                              Instrument element - longName (1 or more)
                                                              Instrument element - shortName (1 or more)
                                                              Used to define staff labels.

                                                              longName / shortName attribute - pos (optional)
                                                              Where where an Instrument has multiple staves pos is used to position the label. The value is 1 for the first staff, 2 between staff 1 and staff 2 etc. Even numbers are always between staves.

                                                              The content is the label identifying the staves on the score. Usually there is only one longName and one shortName. The longName is used on the first system in the score and the shortName for all other systems. The longName is also used to display the Instrument in the instrument list if the trackName is not defined.

                                                              Instrument element - trackName (optional)
                                                              The content is the trackName used to display the Instrument in the instrument list and as the part name. If trackName is not defined, the first longName is used.

                                                              Instrument element - description (inactive)
                                                              Currently not used. The description may be helpful for people editing the instruments.xml file in the future. It should describe the instruments and give helpful information that cannot be found in the other elements.

                                                              Instrument element - genre (optional, multiple)
                                                              The content is a Genre id defined in the main museScore element. One or more genre (small letter g) elements are used to assign the Instrument to Genres. If an Instrument doesn’t have any genre elements, it will only appear in the Instrument list if the “All instruments” category is selected.

                                                              Instrument element - musicXMLid (optional)
                                                              The content is the MusicXML sound id for this Instrument. Not yet implemented, but MuseScore will use this id to import and export MusicXML files with the MusicXML id.

                                                              Instrument element - staves (optional)
                                                              The content is the number of staves for this Instrument, defaults to one.

                                                              Instrument element - bracket (optional - only for multiple staves)
                                                              The content is the type of bracket to use for joining staves. The value should be 0 for a normal bracket, 1 for a grand staff brace, 2 for a thin square bracket and 3 for a simple line.

                                                              Instrument element - bracketSpan (optional - only for multiple staves)

                                                              bracketSpan attribute - staff (optional)
                                                              The first staff to bracket, numbered from 1, defaulting to 1.

                                                              The content is the number of staves that are spanned by the bracket.

                                                              The staff number plus the span should be no more that the number of staves + 1, otherwise the bracket will span to the next instrument.

                                                              Instrument element - barlineSpan (optional - only for multiple staves)

                                                              barlineSpan attribute - staff (optional)
                                                              The first staff to for the spanning barline, numbered from 1, defaulting to 1.

                                                              The content is the number of staves that are spanned by the barline.

                                                              The staff number plus the span should be no more that the number of staves + 1, otherwise the barline will span to the next instrument.

                                                              Instrument element - clef (optional)
                                                              Instrument element - concertClef (optional)
                                                              Instrument element - transposingClef (optional)
                                                              Sets the clef to be used for a given staff for the Instrument. The clef element sets the clef for both concert pitch and transposed scores and parts; the concertClef element sets the clef for concert pitch only and the transposingClef element sets the clef for transposed scores and parts only.

                                                              ...Clef attribute - staff
                                                              The target staff for the Clef, numbered from 1, defaulting to 1.

                                                              The content must be one of the following clef IDs.

                                                              Clefs.png

                                                              The definition for a piano, grand staff, would be

                                                                  <staves>2</staves>
                                                                  <bracket>1</bracket> <!-- Grand staff brace -->
                                                                  <bracketSpan>2</bracketSpan>
                                                                  <barlineSpan >2</barlineSpan>
                                                                  <clef>G</clef>
                                                                  <clef staff="2">F</clef>

                                                              Instrument element - stafftype (optional)
                                                              stafftype presets the number of lines in the staff, the type of notation and the clef. If the clef is also defined by a clef element, then the clef element takes precedence.

                                                              stafftype attribute - staffTypePreset (required)
                                                              This should be one of

                                                              stdNormal,
                                                              -- if the stafftype element content is standard;

                                                              perc1Line, perc3Line, perc5Line,
                                                              -- if the stafftype element content is percussion;

                                                              tabBalajka,
                                                              tab4StrSimple, tab4StrCommon, tab4StrFull, tabUkulele,
                                                              tab5StrSimple, tab5StrCommon, tab5StrFull
                                                              tab6StrSimple, tab6StrCommon, tab6StrFull, tab6StrItalian, tab6StrFrench,
                                                              tab7StrCommon,
                                                              tab8StrCommon
                                                              -- if the stafftype element content is tablature.

                                                              See Tablature for an explanation of Simple, Common, etc.

                                                              For example, for a guitar

                                                                  <stafftype staffTypePreset="tab6StrCommon">tablature</stafftype>    

                                                              Instrument element - singleNoteDynamics (optional) .
                                                              Enables and disables SND notation interpretation, see meanings of SND
                                                              When correcly setup mod in soundfont, Synthesizer, instrument (.xml here provides default setting, users can adjust inside Musescore with 'Use single note dynamics' property in Staff / Part properties), provides a loudness variation effect for use by special Dynamics symbols and Hairpins.

                                                              Default enabled (>0). To disable eg for plucked and percussion instruments set it to 0

                                                              Instrument element - aPitchRange (optional)
                                                              Instrument element - pPitchRange (optional)
                                                              The amateur and professional ranges of the instrument, eg 50-89 for a clarinet. Important for woodwinds and voices. Notes outside the amateur range are highlighted in yellow; notes outside professional range are highlighted in red.

                                                              Instrument element - transposeChromatic (optional)
                                                              Instrument element - transposeDiatonic (required if transposeChromatic is defined)
                                                              If negative, the part sounds lower than written.
                                                              transposeChromatic is used for transposing instruments to define the transposition interval between a transposed part and concert pitch.
                                                              transposeDiatonic should be set to the diatonic equivalent of transposeChromatic. For instruments (Bb and Eb) where there is no direct equivalent, a near equivalent should be used, -15, -8, -1, 6 ... for Bb and -12, -5, 2, 9 ... for Eb.

                                                              Instrument element - Articulation (optional, multiple)
                                                              An articulation defined for an Instrument takes precedence over the same articulation in the museScore element, see above.

                                                              Instrument element - Channel (required, multiple) .
                                                              A Channel defines a set of playback parameters including sound.

                                                              Channel attribute - name (optional) .
                                                              required if more than one Channel is defined. Musescore's sound changing Staff Texts use this to refer to the channel. Any string will work if you setup a custom Staff Text properly. Use one of the following 5 to support the 5 default Staff Texts: "pizzicato", "arco", "tremolo", "mute", "open".

                                                              Channel element - Controller (optional, multiple)
                                                              controller attribute - ctrl : the MIDI continuous controller number
                                                              controller attribute - value : the the value to be set.

                                                              select MIDI Bank .

                                                              Use values of ctrl="0" and ctrl="32" (refered below as ctrl_0, ctrl_32) to select MIDI Bank
                                                              Understanding Bank and Preset in Musescore 3
                                                              See screenshot: jump to polyphone example
                                                              To switch sound sample in score: jump to Change sound/articulation sample

                                                              • When using one soundfont only:
                                                                To use Bank 17 of the 1st soundfont
                                                                      <controller ctrl="0" value="0" /> 
                                                                      <controller ctrl="32" value="17" /> 
                                                              • When using multiple soundfonts:
                                                                The sound selection logic becomes horribly messy, try the copy and paste method , you may not need to bother with the following details.

                                                                Details of MuseScore 3.6.2's messy sound selection logic:
                                                                Soundfont definition allows 129 Banks (#0-#128), but ctrl_32 has 128 distinct values only (0-127). As of MuseScore 3.6.2, what ctrl_0 and ctrl_32 refer to varies with

                                                                • the number of soundfonts used in synthesizer
                                                                • the ordering in synthesizer
                                                                • the number of occupied banks in each soundfont (except the last)

                                                                A workaround to handle the problem is to make sure ordering in synthesizer stay the same, hint: Set as default, and edit your soundfonts so they all have the number 128 bank occupied, then
                                                                1st soundfont Bank 0-127 => ctrl_0_value=0, ctrl_32_value=0,1,2...127
                                                                1st soundfont Bank 128 => ctrl_0_value=1, ctrl_32_value=0
                                                                2nd soundfont Bank 0-126 => ctrl_0_value=1, ctrl_32_value=1,2,3...127
                                                                2nd soundfont Bank 127 => ctrl_0_value=2, ctrl_32_value=0
                                                                2nd soundfont Bank 128 => ctrl_0_value=2, ctrl_32_value=1
                                                                3rd soundfont Bank 0... => ctrl_0_value=2, ctrl_32_value=2,3,4....
                                                                the n-th soundfont's (smaller number banks only) Bank m will be ctrl_0_value= n-1 , ctrl_32_value= n-1+m
                                                                eg
                                                                To use Bank 0 of the 1st soundfont

                                                                <controller ctrl="0" value="0" />
                                                                <controller ctrl="32" value="0" />
                                                                 

                                                                To use Bank 0 of the 2nd soundfont

                                                                <controller ctrl="0" value="1" />
                                                                <controller ctrl="32" value="1" />
                                                                 
                                                              MIDI CC

                                                              For audio output, Musescore use Fluid Synthesizer's MIDI Continuous Controller / Control Change (MIDI CC) Messages, see a list of MIDI CC. To select sound(Bank) thru Staff Text, CC 0 MSB and CC 32 LSB are used. For Hairpins and SNDs such as sfz , CC 2 is used by default (can be disabled or switched to use CC 11 instead in the synthesizer ). To use other MIDI CC, you must declare MIDI Actions for each channel first, study this github project.
                                                              For MIDI out, the reverb and chorus are available in Mixer

                                                              <controller ctrl="0" value="0" /> <!--  0x128 (MSB) -->
                                                              <controller ctrl="32" value="17" /> <!-- 17 (LSB) -->
                                                              select MIDI Preset .

                                                              Channel element - program (optional)
                                                              program attribute - value
                                                              Selects MIDI preset/program, counts from zero. It is the Preset number as shown in Polyphone. Note the counting difference in the official General MIDI documentation table, GM's preset/program counts from one.
                                                              Understanding Bank and Preset in Musescore 3
                                                              See screenshot: jump to polyphone example
                                                              To switch sound sample in score: jump to Change sound/articulation sample

                                                              MIDI Bank and Preset selection demo

                                                              Example soundfont created using Polyphone

                                                              bankeg.PNG
                                                              This soundfond MuseScore_GumGum.sf3 is created using Polyphone
                                                              Consider this Bank 6 Preset 41 sound, to refer to this sound:


                                                              If you want to use musescore's default sounds, load the custom soundfont as the 2nd soundfont in synthesizer

                                                              <Channel name="cres1">  
                                                                <controller ctrl="0" value="1"/><!-- soundfont order - 1 -->
                                                                <controller ctrl="32" value="7"/><!-- soundfont order - 1 +  bank number -->
                                                                <program value="41"/><!-- preset number-->
                                                              </Channel>

                                                              the n-th soundfont's (smaller number banks only) Bank m will be ctrl_0_value= n-1 , ctrl_32_value= n-1+m because preceding soundfont's Bank 128 is occupied, see the messy logic in controller definition

                                                              If your sound requires drumset layout, Bank must be 128, the above formula will not work. For example, to refer to Bank 128 Preset 20 sound, use:

                                                              <Channel name="cres1">  
                                                                <controller ctrl="0" value="2"/><!-- higher bank like 128 is tricky, see logic -->
                                                                <controller ctrl="32" value="1"/><!-- higher bank like 128 is tricky, see logic -->
                                                                <program value="20"/><!-- preset number-->
                                                              </Channel>

                                                              These ctrl_0_value, ctrl_32_value are correct only if custom soundfont is 2nd ordered in the synthesizer, and the preceding soundfont's Bank 128 is occupied, for more info about logic see controller definition

                                                              Alternatively,

                                                              You can load soundfont as the 1st soundfont in synthesizer, but musescore's default instruments will not create correct sound ,
                                                              refer to Bank 6 Preset 41 sound:

                                                              <Channel name="cres1">  
                                                                <controller ctrl="0" value="0"/>
                                                                <controller ctrl="32" value="6"/>
                                                                <program value="41"/>
                                                              </Channel>

                                                              Bank 128 Preset 20 sound:

                                                              <Channel name="cres1">  
                                                                <controller ctrl="0" value="1"/>
                                                                <controller ctrl="32" value="0"/>
                                                                <program value="20"/>
                                                              </Channel>

                                                              Channel element - synti (optional, Channel only)
                                                              Selects the synthesizer. The default MuseScore synthesizer is Fluid which uses SF2/SF3 soundfonts. MuseScore also includes the Zerberus synthesizer which uses SFZ<synti>Zerberus</synti>. The Aeolus synthesizer is not currently supported.

                                                              Channel element - MidiAction (optional, multiple)
                                                              An optional action (set midi controller and/or set program) that can be selected for the channel when the channel is activated in the stave text properties dialog box.
                                                              To use other custom MIDI CC, you must declare MIDI Actions for each channel first, study this github project.

                                                              Channel element - descr (inactive)
                                                              Currently not used. The description may be helpful for people editing the instruments.xml file in the future.

                                                              Channel element - mute (deprecated)
                                                              Channel element - solo (deprecated)

                                                              definitions specific to tablatures

                                                              Instrument element - StringData (required for tablatures) .
                                                              Defines the number of frets and the tuning for each string.
                                                              Althrough the string data is required for a tabulature, it can also be defined for a standard notation Instrument. This Instrument can then be displayed on a standard staff or displayed as a tablature by setting the appropriate tablature style in the edit instruments menu.

                                                              StringData element - frets (required)
                                                              Number of frets for the instrument.

                                                              StringData element - string (required, multiple)
                                                              Tuning of a string as a MIDI pitch number. Uppermost string first.

                                                              For a 5 string banjo:

                                                                    <StringData>
                                                                      <frets>19</frets>
                                                                      <string>67</string>
                                                                      <string>50</string>
                                                                      <string>55</string>
                                                                      <string>59</string>
                                                                      <string>62</string>
                                                                    </StringData>
                                                              definitions specific to unpitched percussion

                                                              Try the .mscx copy and paste method
                                                              Also try .drm copy and paste method: Use Edit Drumset GUI to set up sounds, save it as .drm file, open as plaintext, copy from them to create your custom instruments.xml.

                                                              Instrument element - drumset (required) .
                                                              The value should be true (>0) for an unpitched percussion instrument. Note that a "drumset" may include non-percussive, unpitched instruments such a whistle.

                                                              Instrument element - Drum (multiple)
                                                              Defines the sound, the staff line and the noteheads for each sound in the drumset such as snare, snare crossstick, snare rimshot ...

                                                              Drum attribute - pitch (required)
                                                              The content is the MIDI note number (pitch) for the sound.

                                                              Drum element - head (recommended unless noteheads is specified)
                                                              The content is the notehead group to use for this sound. Specifying the notehead group number is deprecated: the notehead group name is required. The default and the fallback if the name is not recognized is normal.

                                                              Each notehead group defines a set of four noteheads for "black" notes (quarter notes / crotchets and shorter), half notes (minims), whole notes (semibreves) and double whole notes (breves).

                                                              The notehead group may be one of the standard groups for percussion
                                                              normal, cross, plus, xcircle | withx, triangle-up, triangle-down, slash perc 0-7s.png
                                                              slashed1, slashed2, diamond, diamond-old | circled, circled-large perc 8-13s.png

                                                              or one of the oddities
                                                              large-arrow, do, re, mi | fa, (no so), la, ti perc 14-20s.png

                                                              Drum element - noteheads (optional)
                                                              Sets the the noteheads for "black" notes (quarter notes / crotchets and shorter), half notes (minims), whole notes (semibreves) and double whole notes (breves) individually using internationally recognized names. noteheads takes precedence over head.

                                                              noteheads has four, optional, elements defining the noteheads for each length note: quarter for "black" notes, half for half notes /minims, whole for whole notes / semibreves and breve for double whole notes / breves.

                                                              The noteheads equivalent of the notehead group slashed2 is

                                                                  <noteheads>
                                                                      <quarter>noteheadSlashedBlack2</quarter>
                                                                      <half>noteheadSlashedHalf2</half>
                                                                      <whole>noteheadSlashedWhole2</whole>
                                                                      <breve>noteheadSlashedDoubleWhole2</breve>
                                                                  </noteheads>

                                                              Any noteheads from the SMuFL ranges Noteheads, Slash noteheads, Round and square noteheads and Shape note noteheads can be used.

                                                              For unpitched percussion instruments, you may only ever need black noteheads. If the notehead definition for any note length is omitted, the notehead defaults to normal.

                                                              Drum element - line (recommended)
                                                              The content is the staff line to use for this sound. 0 is the top line, 1 the top interline and so on. The default is -1. This is not guaranteed.

                                                              Drum element - voice (recommended)
                                                              The content is the preset voice to use for this sound: a number between 0 and 3, corresponding to staff voices 1 to 4. The default is 0 (staff voice 1). This is not guaranteed.

                                                              Drum element - name (required)
                                                              The content is the name of the sound. This is the tip text for the sound in the drum palette and name of the sound in the Edit drumset dialog box.

                                                              Drum element - stem (recommended)
                                                              The content is the preset stem direction: 0 for automatic. 1 for up and 2 for down. Defaults to up for voice 0 or 3 (staff voice 1 or 4) and defaults to down for voice 1 or 2 (staff voice 2 or 3).

                                                              Drum element - shortcut (optional)
                                                              The content is the shortcut for this sound which should be a letter between A and G.

                                                              References

                                                              Filtros de páxinas de libroBook page filters

                                                              Filtro na liña [ inline: ]

                                                              Pódese ligar a ficheiros enviados co nodo actual empregando etiquetas especiais. As etiquetas serán substituídas polos ficheiros correspondentes. Por exemplo: Supoñamos que enviamos tres ficheiros (nesta orde):

                                                              • imaxe1.png (referido como ficheiro nº1)
                                                              • ficheiro1.pdf (referido como ficheiro nº2)
                                                              • imaxe2.png ((referido como ficheiro nº3)

                                                              NOT FOUND: 1 ou NOT FOUND: imaxe1.png será substituído por <img src=imaxe1.png alt=test>
                                                              NOT FOUND: 1 ou NOT FOUND: imaxe1.png será substituído por <a href=imaxe1.png>test</a>
                                                              NOT FOUND: 2 ou NOT FOUND: file1.pdf será substituído por <a href=ficheiro1.pdf.png>test</a>

                                                              Filtro de ligazóns libres [ [ ] ]

                                                              O filtro de ligazóns libres examina o corpo das páxinas de libro procurando palabras ou frases incluídas entre corchetes [[nodetitle:como aquí]] . Pódense premer estas palabras e ir así á páxina de libro que ten esas palabras como título. De non existir, a ligazón tentará crear a páxina de libro e mostrar o formulario de creación da páxina, co título xa posto. Se o usuario non ten permiso para crear unha páxina de libro, a ligazón envía a unha páxina cos resultados dunha procura que coincida coas palabras.

                                                              Para alén destes estilos simples de ligazón, o filtro de ligazóns libres tamén permite unha sintaxe expandida mediante o método dos corchetes duplos. As ligazóns libres que conteñan unha barra (a tubería, "|") ligan cun texto diferente. Por exemplo, [[nodetitle:isto é o que se mostra|este é o destino]] liga o texto "isto é o que se mostra" cun contido titulado "este é o destino" ou, se non existe, creará a páxina de contido con "este é o destino" como título.

                                                              As ligazóns libres con corchetes duplos poden conter tamén URL que comecen por http://. Polo tanto, son aceptábeis as ligazóns como esta: Freelinking: Unknown plugin indicator , así como esta: //www.drupal.org , que mostra e liga co URL no corpo.

                                                              Design & implementation

                                                              There are only a few documents regarding MuseScore internals, except of course the code and its comments.

                                                              Element classes hierarchy


                                                              Click on the image to download as PDF

                                                              Elements and score objects model


                                                              Click on the image to download as PDF.

                                                              A score is represented by a Score object in memory. A Score object can have a parent Score if the score is an Excerpt. An Excerpt object is used to represent a part in part extraction. A Score also maintain a list of Excerpts if it has parts.

                                                              In a Score, notes are stored in a list of Measure objects. Measure inherits from MeasureBase together with the frames. A Measure represents a measure across all the staves of a system, it's a "vertical column" of music. The Score also stores the tempo change list (TempoMap) and the time signature change list TimeSigMap. A Score object is complex, and has several states variables for layout, audio rendering. It also stores score metadata, style etc...

                                                              Layers in a Score object are a way to hide or show some Element according to the selected layer. A Score stores a list of Layers.

                                                              Layout

                                                              Element positions

                                                              The screen position of a visible element is computed from three values:

                                                              AP Anchor position of element. This is usually the position of the parent element.
                                                              LO Layout Offset, computed in the layout engine. MuseScore calculates it as the normal position of the element
                                                              UO User Offset, created by dragging an element by the user

                                                              The display position is computed as:
                                                              Display Position = AP + LO + UO

                                                              The saved position in a MuseScore file is computed as:
                                                              Saved Position = LO + UO

                                                              On read the saved position is written to the UserOffset (UO). The LayoutOffset (LO) is set to zero. On the first call of layout() the values for UO and LO are reconstructed. The condition LO==0 is used to determine the first call to layout().
                                                              After first Layout the values are computed as (RP = read position from file)

                                                              void Element::adjustReadPos()
                                                                          {
                                                                          if (RP != 0) {
                                                              		      UO = RP – newLO;
                                                              	            RP = 0;
                                                              		      }
                                                                          }

                                                              As a consequence, if you are writing an import filter and want to override the automatic placement of elements on import, set Element->_readPos. After layout MuseScore will compute a proper userOffset out of it.

                                                              Older MuseScore versions (<= 0.9.6) do only save the UO value. If loaded with a different MuseScore version than created, the position of certain elements may differ, as the layout algorithm (and the LO value) may have changed. This is avoided with the above scheme.

                                                              Caveats: adjustReadPos() has to be applied after the first complete layout of an element. This also means that a second layout() call should not change any element position. The layout has to be done in one pass.

                                                              Playback and synthesizers

                                                              msynth is a wrapper for Fluid and Zerberus.
                                                              Fluid is a SF2/SF3 soundfont synthesizer. The SF3 format is not a standard and use by MuseScore only. It's exactly like SF2 except the samples are encoded in OGG instead of WAV.
                                                              Zerberus is a SFZ synthesizer. It's mainly tested with the salamander piano SFZ. Any work to add support for more opcode is welcome.

                                                              MuseScore internal score representation

                                                              This document gives an overview of how a score is represented in MuseScore. If you find it long on generalities and short on details, consider that a good thing, as details tend to change rapidly. So by keeping this fairly general, it is less likely to be out of date. This description was originally created shortly before the release of MuseScore 2.0.

                                                              All of the source files referenced in this document are found in the “libmscore” subfolder of the main repository unless otherwise noted.

                                                              Score

                                                              A Score is the main top-level object. You can view score.h to see its definition. There are members here to store the style settings and other options associated with the score, and there are all sorts of other members to keep track of other things that seldom matter to most of the code. The main thing that usually matters is the list of measures – that’s where almost everything about the content of the score (even things like the title frame) are to be found. There is also a list of staves – one staff for each instrument in your score, normally, except for instruments like piano that may have two.

                                                              Aside from the lists of measures and staves, the next most interesting thing in a score are the various “maps” that MuseScore builds to keep track of things that might change over the course of the score – the time signatures, key signatures, tempo markings, etc. These allow code to quickly ascertain the current time signature (or whatever) at any given point in the score. There is also a map for elements called spanners – these are thing like slurs or crescendo markings that don’t just live in one place in the score but instead span from one place to another.

                                                              The Score object also contains a list of the pages for the score and the systems that make up those pages, but actually, these are not normally needed for most work. These data structures are created and managed by the layout engine.

                                                              Elements

                                                              In general, MuseScore is WYSIWYG, and if you see something on the page, there is probably an object for it. Element is the base class for all such objects. Elements are organized in a tree-like structure, where a Score contains Pages, each Page contains Systems, each System contains Measures, each Measure contains Segments, each Segment contains Chords, each Chord contains Notes, etc. Each element contains a pointer to its parent.

                                                              Elements generally have a layout() method to determine position and other charateristics; this is often a significant part of the implementation of any given element. Some elements are more abstract, like Staff, which defines the attributes of any given staff (number of lines, instrument to use, etc) but are not actually drawn directly.

                                                              Measures

                                                              As mentioned, the most important thing in a Score is the list of Measures. Actually, it’s a list of MeasureBases – this is the base class for both measures and frames. But for many purposes, you can ignore the frames. And even though measures are children of systems which are children of pages, you normally access the measure list for a score directly.

                                                              A Measure object (measure.h) contains a bunch of members you are unlikely to care about. But just as the most important member of the score is the list of measures, the most important member of a measure is a list of segments. See below

                                                              Segments

                                                              The Segment object (segment.h) is perhaps the most important data structure to understand in MuseScore. A segment represents a moment in time – which, by the way, is represented in MuseScore in units called “ticks” (480 of them per quarter note). A segment contains a list of elements that occur at that time position across all staves. So if your score has four instruments, two of which play a note at a particular moment in time, there will be elements for those two notes in the segment. Each element in a segment contains an indication of what staff it lives on, also what voice within the staff. Actually, these two pieces of information are combined into the notion of of “track”. Tracks 0-3 are the four voices for the first staff, tracks 4-7 are the four voices for the second staff, etc.

                                                              A segment contains an element for a given track only if something actually happens at the tick for the segment. So for instance, if one staff has a whole note while another has two half notes, there will be two segments total. The first segment, representing beat one (tick 0 within the measure) will contain the whole note for the first staff and the first half note for the second staff. The second segment, representing beat three (tick 960 within the measure), will contain the second half note for the second staff but will contain nothing for the first staff.

                                                              A segment can also contain annotations – markings like staff text, chord symbols, dynamics, etc. They also have a track to record what staff and voice they are associated with.

                                                              So far, I have been talking about one kind of segment only - the type that contains chords and rests (or more generally, chordrests, the parent class of both chords and rests). There are also separate segments for the clefs, time signatures, key signatures, and barlines. Much of the code in MuseScore ignores these and focuses only on the chordrest segments.

                                                              Chords

                                                              MuseScore makes a distinction between a chord and note that isn’t what you might expect. A Chord (chord.h) is a collection of one or more notes on a given track (staff/voice) at a given tick (moment in time). Basically, even single notes are chords to MuseScore. A chord has a list of the notes that make up the chord, so that list will just contain a single element for single notes. By definition, all notes of a chord share the same basic duration. Notes that occur at the same tick but have different durations must be entered into different voices – that’s how MuseScore and most other notation programs organize things both internally and in the user interface.

                                                              A chord has a duration and list of notes. It also has info about the stem, ledger lines, grace notes to apply to the chord, articulations, arpeggio, tremolo, glissando, etc. Two chords tied together are represented in MuseScore as two separate chords (each with its own duration) and a separate tie object, just as it looks.

                                                              Note

                                                              As mentioned, a chord has one or more notes. The Note object (note.h) is where you find information about pitch, staff line, accidentals, playback information – anything that potentially differentiates one note within a chord from another.

                                                              Rest

                                                              The Rest object (rest.h) is a sibling of chord – they share the same parent, chordrest. A rest has a duration and that’s about it. Full measure rests are represented with a special duration value, so they can fill a measure of any time signature.

                                                              Distribution maintainers

                                                              Windows

                                                              Windows installable

                                                              Anatoly Osokin (Anatoly-os); formerly: Nicolas Froment (lasconic)

                                                              Microsoft Store

                                                              Anatoly Osokin (Anatoly-os); formerly: Nicolas Froment (lasconic)

                                                              Windows Portable App

                                                              PortableApps.com in-house team; formerly: Bart.S

                                                              macOS

                                                              Anatoly Osokin (Anatoly-os); formerly: Nicolas Froment (lasconic), Stefan de Konink (skinkie)

                                                              Linux

                                                              Linux AppImage

                                                              Anatoly Osokin (Anatoly-os)
                                                              Peter Jonas (shoogle)
                                                              Eric Fontaine (ericfontainejazz)

                                                              Linux Distributions

                                                              Ubuntu (PPA): Thorsten Glaser (mirabilos); formerly: Peter Jonas (shoogle), Toby Smithe
                                                              Debian: Thorsten Glaser (mirabilos); formerly: Tiago Vaz (tiagovaz), Toby Smithe
                                                              Fedora: Seve, Orcan Ogetbil
                                                              openSUSE: Ganglia
                                                              PCLinuxOS: Galen Seaman
                                                              Mandriva:
                                                              Arch Linux: haawda
                                                              Frugalware Linux: Slown
                                                              Snappy:
                                                              Flatpak:

                                                              BSD

                                                              OpenBSD: Brian Callahan
                                                              FreeBSD:

                                                              Milestones

                                                              This page is extremely old and out of date.

                                                              Basic notation

                                                                Customization

                                                                MuseScore allows for customization to manually fix most of the basic notation problems listed below. However, the following problems occur so often that better defaults would save significant amounts of time.

                                                                • #9336: rests should adjust position for multiple voices
                                                                • Ties
                                                                  • #13034: Tie direction for chords
                                                                  • #2316: Small ties
                                                                  • #23147: Ties don't re-position to avoid collision with upcoming notes
                                                                  • #22459: Tie direction for single-stemmed chords
                                                                  • #23135: Tie direction for double-stemmed writing
                                                                  • #23136: Tie direction for single-stemmed moving chords
                                                                • Beams
                                                                  • #3459: Beaming of sixteenth and eighth note sequences in 4/4
                                                                  • #7765: Beam should reach center line for notes beyond one ledger line
                                                                  • #13035: Beam direction for two notes
                                                                  • #13036: Beam direction for three or more notes
                                                                  • #23377: Beam collides with grace note
                                                                  • Beams should be horizontal for groups of repeated intervals (bug report and test file to be written)
                                                                  • Beams should be horizontal when there are several repeated pitches (bug report and test file to be written)
                                                                • #4867: Rests in measures should be grouped according to time signature
                                                                • #7510: Up/Down arrows skip diatonic notes for some key signatures
                                                                • #3325: Seconds between voices overlap
                                                                • #9174: Seconds in voice 2 flip to wrong side of stem
                                                                • #1464: Faulty vertical alignment of accidentals at chords
                                                                • #21438: Ties need to break at key and time signatures
                                                                • #16098: Rests between beamed notes don't relocate
                                                                • #21232: Distances before the first note
                                                                • #21994: Adjacent multi-voice notes on the incorrect side of stem
                                                                • #15434: Incorrect positioning of augmentation dots
                                                                • #20390: Tremolo through stem collide with ledger lines
                                                                • #22642: Horizontal positioning of accidental incorrect if in chord with adjacent notes
                                                                • #18184: Adjacent notes appear on the same side of stem when adding another
                                                                • #21606: Slur does not lead to pitch resolving the ornament
                                                                • #17889: Removing top instrument removes group bracket

                                                                Necessary

                                                                  These are bugs in which workarounds are either not desirable, or impossible.
                                                                  • Glissando
                                                                    • #3811: Glissando incorrectly presented over line break
                                                                    • #17352: Glissando incorrectly positioned in cross staff notes
                                                                    • #19155: Apply glissando to multiple notes in chord
                                                                  • #3919: Line can't be extended to the last note
                                                                  • #22826: Courtesy key and time signatures incorrectly positioned at line break
                                                                  • #21131: Ledger lines for mix of small- and full-sized notes on same stem sized incorrectly
                                                                  • #22687: Concert Pitch switching does not preserve key spelling if the transposition crosses between sharp and flat keys

                                                              Ensemble

                                                              The previous version of MuseScore made significant strides towards preparing MuseScore for use on ensemble scores such as orchestra or band. Below are some remaining hurdles.

                                                                Necessary

                                                                • #3587: Non-lossy transposition is necessary for composers who wish to switch back and forth between concert pitch and written pitch. Implementation details here
                                                                • #4617: System text on hidden staves should show on next available staff
                                                                • #4487: Part should be transposed pitch regardless of full score
                                                                • #4979: Instrument names with flats do not resize with score (0.9.5 regression)
                                                                • Header or footer text for multi-page scores (see also //musescore.org/en/node/6197 )
                                                                • #9456: Automatically add horizontal frame before first system of parts
                                                                • #12367: Volta brackets should export to all parts
                                                                • Hiding staves
                                                                  • #6107: Multi-staff barlines break with hide empty staves.
                                                                  • #10742: Objects are amiss after undo Hide Empty Staves
                                                                  • #10217: Add option to preserve all staves of multi-stave instrument (Also see posts)
                                                                  • #22626: System dividers

                                                                Helpful

                                                                • Parts
                                                                  • #4975: Parts should have multi-measure rests by default
                                                                  • Part dialog should be automatically filled out the first time it is opened (with all the instrument parts)
                                                                  • Linked parts so that you don't have to re-create parts each time you make a change to the score
                                                                • Ability to switch instruments mid-way through a staff. See http://musescore.org/node/3834 [Partially implemented: Sound changes possible but does not support staff or transpositions changes yet]
                                                                • Newly added instruments should have the correct key signature. (See #5961: Wrong key signature for new instruments)
                                                                • #22625: Thin square bracket for orchestra scores

                                                              Lyrics

                                                              The following hurdles make MuseScore impractical or difficult for creating professional-quality scores with lyrics.

                                                                Necessary

                                                                • #4149: Left align lyrics for melismas and tied notes
                                                                • #17190: Non-last lyric syllables on slurred/tied notes are centered rather than left aligned
                                                                • #3961: Melisma line over system break
                                                                • #22696: Lyrics don't overlap stave elements
                                                                • #24856: Ignore "parenthesized expressions" that precede lyric syllables

                                                                Helpful

                                                                • #3911: Copy paste of multiple lyric syllables
                                                                • #5261: Lyrics for melismas should not respace notes if there is room before next syllable
                                                                • #15358: Automatically-generated melisma lines

                                                              User Experience Enhancements

                                                              • #14365: make default page size locale-dependent
                                                              • #11073: [UX] When note in chord is deleted, automatically select other note in chord

                                                              Version information

                                                              Release date and revision number for each stable version of MuseScore. The list matches the file version with the MuseScore version number used in the Help→About dialog.
                                                              Release dates link to release announcements/notes.

                                                              MuseScore version mscx file version Release date Revision
                                                              Version 4.4.2 4.40 2024-09-12 3130f97
                                                              Version 4.4.1 4.40 2024-09-05 0b3dd00
                                                              Version 4.4.0 4.40 2024-08-27 0a6179a
                                                              Version 4.3.2 4.30 2024-06-12 22b46f2
                                                              Version 4.3.1 4.30 2024-05-29 026c26b
                                                              Version 4.3.0 4.20 (!) 2024-05-07 5f36e74
                                                              Version 4.2.1 4.20 2024-01-24 d757433
                                                              Version 4.2 4.20 2023-12-18 eb8d33c7
                                                              Version 4.1.1 4.10 2023-07-26 e4d1ddf2
                                                              Version 4.1.0 4.10 2023-07-12 2e3a93a
                                                              Version 4.0.2 4.00 2023-03-13 b65559e
                                                              Version 4.0.1 4.00 2023-01-13 9b70a8c
                                                              Version 4.0 4.00 2022-12-14 5485621
                                                              Version 3.6.2 3.02 2021-02-08 3224f34
                                                              Version 3.6.1 3.02 2021-01-27 d0fc8e9
                                                              Version 3.6 3.02 2021-01-14 1977cb3
                                                              Version 3.5.2 3.01 2020-10-16 465e7b6
                                                              Version 3.5.1 3.01 2020-10-09 186bf15
                                                              Version 3.5 3.01 2020-08-06 43c5553
                                                              Version 3.4.2 3.01 2020-02-07 148e43f
                                                              Version 3.4.1 3.01 2020-01-25 20414b2
                                                              Version 3.4 3.01 2020-01-24 8effb8d
                                                              Version 3.3.4 3.01 2019-12-04 7684abe
                                                              Version 3.3.3 3.01 2019-11-26 57d770e
                                                              Version 3.3.2 3.01 2019-11-14 492d7ef
                                                              Version 3.3.1 3.01 2019-11-13 824af4c
                                                              Version 3.3 3.01 2019-10-31 4761df6
                                                              Version 3.2.3 3.01 2019-07-08 d2d863f
                                                              Version 3.2.2 3.01 2019-06-30 c893c61
                                                              Version 3.2.1 3.01 2019-06-28 59a887d
                                                              Version 3.2 3.01 2019-06-25 8594c8c
                                                              Version 3.1 3.01 2019-05-28 e26f7c46
                                                              Version 3.0.5 3.01 2019-03-12 58dd23d
                                                              Version 3.0.4 3.01 2019-02-28 cda40803
                                                              Version 3.0.3 3.01 2019-02-26 5a0be2ac
                                                              Version 3.0.2 3.01 2019-01-29 / 2019-01-30 8ca4d2c / a8b90a8
                                                              Version 3.0.1 3.01 2019-01-15 06a66a2
                                                              Version 3.0 3.01 2018-12-24 c1a5e4c
                                                              Version 2.3.2 2.06 2018-07-31 4592407
                                                              Version 2.3.1 2.06 2018-07-06 0899e9d
                                                              Version 2.3 2.06 2018-06-29 25247d9
                                                              Version 2.2.1 2.06 2018-04-03 51b8386
                                                              Version 2.2 2.06 2018-03-27 21646c1
                                                              Version 2.1 2.06 2017-05-02 871c8ce
                                                              Version 2.0.3.11 2.06 2016-10-06 6347ed6
                                                              Version 2.0.3 2.06 2016-04-01 3c7a69d
                                                              Version 2.0.2 2.06 2015-07-16 f51dc11
                                                              Version 2.0.1 2.06 2015-05-05 b25f81d
                                                              Version 2.0 2.06 2015-03-24 6e47f74
                                                              Version 1.3 1.14 2013-02-27 r. 5702
                                                              Version 1.2 1.14 2012-03-13 r. 5470
                                                              Version 1.1 1.14 2011-07-27 r. 4611
                                                              Version 1.0 1.14 2011-02-07 r. 3996
                                                              Version 0.9.6.3 1.14 2010-09-25 r. 3507
                                                              Version 0.9.6.2 1.14 2010-08-16 r. 3400
                                                              Version 0.9.6.1 1.14 2010-07-13 r. 3280
                                                              Version 0.9.6 1.14 2010-06-07 r. 3145
                                                              Version 0.9.5 1.11 2009-08-14 r. 2012
                                                              Version 0.9.4 1.10 2009-03-21 r. 1518
                                                              Version 0.9.3 1.9 2008-09-21 r. 1102
                                                              Version 0.9.2 1.9 2008-04-12 r. 888
                                                              Version 0.9.1 1.4 2008-01-24 r. 646
                                                              Version 0.9 1.4 2008-01-23
                                                              Version 0.8 2007-12-19
                                                              Version 0.7 2007-09-15
                                                              Version 0.6.1 2007-07-30
                                                              Version 0.6 2007-07-24
                                                              Version 0.5 2007-03-27
                                                              Version 0.4 2007-02-11
                                                              Version 0.2 2005-08-24
                                                              Version 0.1 2005-04-13
                                                              Version 0.0.6 2003-02-05
                                                              Version 0.0.5 2003-01-27
                                                              Version 0.0.4 2003-01-13
                                                              Version 0.0.3 2003-01-06
                                                              Version 0.0.2 2002-10-10
                                                              Version 0.0,1 2002-10-05
                                                              Version 0.0.0 2002-10-02

                                                              1. Mac only ↩︎

                                                              Scrapbook of feature changes and additions

                                                              Warning: this page is very outdated.

                                                              Purpose

                                                              As feature changes are made to MuseScore, they may be listed here. This will help developers in tracking work, help testers in using the nightly builds to try out new features and perhaps provide feedback, and perhaps most importantly, it will also help serve as a checklist of features needing documentation as MuseScore approaches a new release. The distinction between new feature and bug fix is sometimes blurry, but if a change will require documentation, it should probably be listed here.

                                                              Users should understand that features listed here may still be experimental and subject to further change or even removal.

                                                              Developers: Feel free to list new features here whether completely implemented or not. You may indicate any known limitations or bugs if you like, as well as any further enhancements you are considering. You may also wish to indicate whether users may provide feedback on the feature, and if so, whether you would prefer they do so via the issue tracker, the forums, the developers list, private email, or by other means. Provide as much or as little detail as you like. Even just listing a feature name with no additional information would be useful for the purpose of making sure it does not fall through the cracks when it comes time to create documentation.

                                                              Note: This page itself is experimental and subject to change in form and direction. A template for feature changes/additions is provided as a starting point, but if a different format is deemed more appropriate, feel free to use one and even to update the template if you feel this would make sense for others.

                                                              Changed / Added Features

                                                              Constrained dragging

                                                              • Description: allows you to limit a given drag operation to horizontal or vertical movement only
                                                              • Usage: ctrl-drag to move elements horizontally; shift-drag to move them vertically
                                                              • Known limitations/bugs/opportunities: element is first reset to original/default position
                                                              • Feedback desired:

                                                              Notes: See http://musescore.org/en/node/9346

                                                              More flexible clef changes

                                                              Rev. 4080 implements more flexible clef changes. Example is a piano score where the top staff starts with a G clef and switches immediately to an F clef.
                                                              clefchange.png

                                                              Drag/Drop elements on score view

                                                              Elements on the score view can be used like palette elements. For this press Shift+Ctrl and drag an element with left mouse button.
                                                              This also allows to drop elements from the score view to a palette. (First you have to make the palette changable; see palette context menu).

                                                              Continued Drop

                                                              If you press Shift+Ctrl and drag an element from the palette, the operation does not end on drop. You can can continue to drop to other locations. This is currently not implemented for all kind of elements. Tested with articulations.

                                                              Enhanced Clef Layout

                                                              Clef layout spacing was changed in revision 4101. In previous versions clefs looked like:
                                                              clef-layout2.png or clef-layout3.png
                                                              This is the new spacing:
                                                              clef-layout1.png and clef-layout4.png
                                                              The changes may have side effects and need testing.

                                                              Local Time Signatures

                                                              Time signatures can be different for different staves. An example here is Bach's 26. Goldberg Variation:

                                                              gb26-1.png

                                                              MuseScore has the concept of a global time signature and an actual (local) time signature. You change the global time signature by dragging and dropping a palette object to a staff. The global time signature is used to count beats (as shown in the status line) and is the reference for tempo markings. The global time signature is the same for all staves and normally identical to the actual time signature.

                                                              The actual time signature is set in the time signature property dialog and can deviate from the global time signature for every staff (left hand 18/16 in the example)

                                                              gb26-2.png

                                                              The text of the time signature can be set independent of the actual values.

                                                              A local time signature is set by dropping a time signature symbol with the Ctrl key pressed. The local time signature is set only for one staff. A global time signature is replicated for all staves.

                                                              Album Manager

                                                              The album manager allows to prepare a list of scores. The list can then be saved as an album file ("*.album").

                                                              album.png

                                                              The first implemented action for an album is "Print". The album scores are printed in order with the correct page numbers set overriding the page number offset values in "Page Style". The album is printed in one print job so double sided printing (duplex printing) also works as expected.

                                                              Layers

                                                              For the Open-Goldberg project I want to be able to create different versions of the score. One version is the "Urtext", a score which is close to the original version of Bach. A second version could be a Czerny variation, which in addition to the Urtext contains fingerings.

                                                              The layer feature allows to create different versions out of one score file. If you want to add fingerings you have to create a layer and tag the fingering elements with the layer name.

                                                              First create layers:

                                                              layer1.png

                                                              Second create a score variant:

                                                              layer2.png

                                                              Add the visible layer to the score variant. Then select all fingerings and tag them with the name of the score variant:

                                                              layer3.png

                                                              Default layer:
                                                              layer4.png

                                                              Czerny layer:
                                                              layer5.png

                                                              Metronome

                                                              • Description: You can switch a metronome on and off during playback and the cursor now moves beat by beat. It's a new button in the toolbar.
                                                              • Usage: If you use MuseScore as a repeater, you now have a metronome
                                                              • Feature request: #4199: Metronome on playback

                                                              Follow and unfollow the score during playback

                                                              • Description: You can switch the following of the score on and off during playback. It's a new button in the toolbar
                                                              • Usage: It's now possible to listen to a measure while scrolling around the score.
                                                              • Feature request: #12331: Option to not pan the score while playing

                                                              Local Relayout

                                                              Notes and Rests at the same time position are vertically aligned by default. Sometimes this is not desired.
                                                              A new feature allows to relayout beamed notes and rests without considering notes/rests in other staves.

                                                              Before setting relayout flag:
                                                              relayout1.png
                                                              Checking relayout flag:
                                                              relayout2.png
                                                              After setting relayout flag
                                                              relayout3.png

                                                              Other examples: http://musescore.org/en/node/18826#comment-68687

                                                              Programmable MIDI actions

                                                              • Description: When you are entering notes with a MIDI keyboard, you need to go back to your computer keyboard to play or to change note durations. Now you can program some keys on your MIDI keyboard to do these actions.
                                                              • Usage: Go to Preferences -> Note Entry to program MIDI actions.
                                                              • Known limitations/bugs/opportunities: None. Please report in the issue tracker.
                                                              • Feedback desired: Yes

                                                              New audio architecture: SF3, Aeolus, Zerberus, effects

                                                              • Description: A new audio architecture for synthesizer and effects.
                                                              • Read more about it
                                                              • Feedback welcome

                                                              Repitch mode

                                                              • A simple way to change pitches of a passage without affecting the rhythm, ornaments, slurs etc...
                                                              • Read more about it
                                                              • Feedback welcome

                                                              Extended Ties

                                                              tie1.png is rendered as tie2.png

                                                              WYSIWYG chord symbols

                                                              • Description: you can now type chords however you like, and they will be understood and rendered as well as possible. So you can type Bbm7, Bbmi7, Bbmin7, or Bb-7 and they are all understood as minor seventh chords and rendered well. A "Standard" and "Jazz" rendering style are provided and will render similarly to the old "stdchords.xml" and "cchords_muse.xml" in terms of fonts, superscripting, etc, but both styles support this WYSIWYG mode so you can always use whatever abbreviations you like, use parentheses around alterations or not, etc. In addition, you can enter parentheses around chords to show they are optional, and they will still be handled correctly. Otherwise unparseable entries like "N.C." or "/" are also rendered consistently with other chords.
                                                              • Usage: Chords are entered just as before; you just don't have to be so careful about how you spell them
                                                              • Known limitations/bugs/opportunities: As long as the root is recognizeable, the chord will render and transpose reasonably. So Bbrandom will transpose as Crandom, etc. But MusicXML exports only works to the extent the chord is actually understandable according to a predetermined list of acceptable abbreviations for major, minor, etc. Eventually we could allow this list itself to be customizable if there is felt to be sufficient need.
                                                              • Feedback desired: Any. Most interesting: are there examples of chord symbols that can be found in published literature that are *not* handled correctly?

                                                              Notes: this is how a variety of different chord symbols will render in the "Jazz" style:
                                                              wysiwyg_chords.png

                                                              International chord symbols

                                                              • Description: adds options for Solfeggio and Lower case minor chords, improves German chord mode
                                                              • Usage:: Style / General / Chordname, select from radio buttons for Standard, German, Solfeggio root naming, checkbox for Lower case minor chords. Existing chords are automatically converted to selected style, and new chord entry respects these settings, so typing Do7 in Solfeggio mode results in a C (Do) dominant seventh chord rather than a D diminished, and typing "a7" in Standard mode with "Lower case minor chords" enabled is understood as a minor seventh chord rather than a dominant seventh.
                                                              • Known limitations/bugs/opportunities: further customizations (such as rendering "Re" with an accent on the "e") are possible by editing the chord description file.
                                                              • Feedback desired: Did we get the most important case, and are they handled correctly? Specifics were taken from LilyPond for the most part. For instance, in German mode, chords are now rendered with accidentals as "is" and "es" rather than sharp and flat; bass notes always lower case regardless of major/minor. In Standard or Solfeggio modes, with "Lower case minor chords" checked, bass notes remain upper case. In Solfeggio mode, we use "Do", "Sol" and "Si" rather than "Ut", "So", or "Ti". Are any of these decisions contrary to what most people using these options would expect?

                                                              Notes:

                                                              Count-in

                                                              • Description: You can switch on and off a count-in to be played each time the playback starts. The count-in plays beats for a full measure (according to nominal time signature at playback starting point); if the starting point is mid-measure or at a 'short' measure (anacrusis), it also plays enough beats to fill the measure missing part. User interface: a button in the Play Panel.
                                                              • Usage: If you use MuseScore as a MinusOne repeater, you can sync your 'entrée' with MuseScore's.

                                                              (Feature name)

                                                              • Description:
                                                              • Usage:
                                                              • Known limitations/bugs/opportunities:
                                                              • Feedback desired:

                                                              Notes:

                                                              Comparison of stable, beta, and development versions

                                                                MuseScore comes in three different types: stable releases, beta releases, and nightly builds. If you have not been closely involved with a software project before, then these terms may be unfamiliar. Don't let that stop you from getting involved. The quality of a stable version depends on testing and reporting by the wider community using the beta and nightly builds.

                                                                Stable versions

                                                                The stable versions (also called final releases) come about every nine months and are intended for normal, everyday use. Stable versions have received extensive testing from the community prior to release. In the lead up to an official release, code development slows down to focus on fixing bugs found by the testing community and to avoid introducing new problems. If any critical bugs are found at the last minute, then they may delay the official release. To obtain the latest stable version, click on the blue download button on the home page of the MuseScore website.

                                                                Beta releases and release candidates

                                                                Beta versions come in the months leading up to a major new version to offer an early preview of the stable release. Bugs are expected in beta releases, and they are intended for testers and advanced users, in order to make sure that the final release is as bug-free as possible.
                                                                Release Candidates come out in the months leading up to a major new version.
                                                                If there is a beta version or release candidate currently available, it can be found on the download page.

                                                                Development builds

                                                                Development builds from MuseScore's master branch are intended for testers only, and should not be used otherwise. They may come several times a day, but may be more or less frequent, depending on how often there are changes to the code. Development builds are created automatically, so you may be the first human to test a particular build. Occasionally, even basic functionality may be broken.

                                                                To obtain the latest development build, see: Development builds

                                                                At times there also development builds of a non-master branches, like recently for the 2.3 branch. These are supposed to be previews of what will or may become the next minor release. You get them from the places mentioned above, just make sure not to take those with "master" in their name.

                                                                Summary

                                                                  Frequency Purpose Prior testing and stability
                                                                Official release About every 9 months Normal use Fairly stable
                                                                Beta version / Release Candidate Months/weeks leading up to a stable release Early preview for testers and advanced users Some instability expected
                                                                Development build (from master branch) Every time the code changes, could be multiple per day For testing only Untested, except for some automated regression tests in the build server
                                                                Development build (from non-master branches) Every time the code changes, could be multiple per day For testing / normal use, advanced users Fairly stable

                                                                Branding

                                                                Logotype

                                                                Preview Vector file 100x22 bitmap 150x32 bitmap 250x54 bitmap 450x97 bitmap 600x130 bitmap 2000x433 bitmap
                                                                MuseScore logo SVG PNG PNG PNG PNG PNG PNG
                                                                SVG PNG PNG PNG PNG PNG PNG
                                                                SVG PNG PNG PNG PNG PNG PNG

                                                                Logomark

                                                                Preview Vector file 100x100 bitmap 150x150 bitmap 250x250 bitmap 450x450 bitmap 600x600 bitmap
                                                                SVG PNG PNG PNG PNG PNG
                                                                SVG PNG PNG PNG PNG PNG
                                                                SVG PNG PNG PNG PNG PNG

                                                                Font

                                                                The font recommended for use in materials and on the website is Raleway by Matt McInerney.

                                                                Design principles

                                                                  GUI Tips

                                                                  Separation of concerns

                                                                  Try to keep content (data) separate from its presentation (how it is displayed). This enables either the content changed later without having to change the presentation, and vice versa. In web design this is achieved by using HTML files for content and CSS files for presentation.

                                                                  In GUI desktop programs this is achieved by following the Model/View paradigm. Qt provides Model/View classes that make this relatively straightforward: define your model class, then use it in a view class! It is best to avoid Qt classes in libmscore, so you may need to define a model in mscore that simply takes data from libmscore. This model is then provided to a view in mscore.

                                                                  Use Qt Widgets (but not QWidget)

                                                                  The easiest way to satisfy as many design principles as possible is to always use Qt's own widgets (QLineEdit, QPushButton, QTreeView, etc.) rather than creating your own. The look and behaviour of Qt's widgets is highly customisable and should be able to satisfy most requirements. Widgets can be added graphically to .ui files via QtCreator's Design mode (a.k.a Qt Designer), and manipulated dynamically in the code (.h and .cpp files).

                                                                  Promoting widgets

                                                                  If you need to customise a widget, consider subclassing one of Qt's widgets and applying your customisations to the subclass. This means the custom widget can be reused elsewhere in the code, and it is even possible to insert custom widgets in .ui files using the promoted widgets mechanism.

                                                                  Combining widgets

                                                                  Sometimes it can be useful to create a new widget that is made up of multiple Qt widgets. MuseScore's Instrument Widget (mscore/instrwidget.h, .cpp, .h) is a good example of this. The Instrument Widget is used in the Instrument Dialog (mscore/instrdialog.ui).

                                                                  Creating your own widgets

                                                                  If you do need to create your own widgets, try to base yours on one of the abstract widget classes (e.g. QAbstractButton, QAbstractItemView, etc.) rather than creating one from scratch. Don't subclass QWidget if you can subclass something else!

                                                                  Accessibility first!

                                                                  Accessibility is about making the interface usable for people with disabilities and special needs. Around 1 in 5 people have some form of disability.

                                                                  It's tempting to think of accessibility as something optional that can be left until after the main design has been completed, but this is wrong and will create more work in the long term. If you get accessibility right from the beginning, it will actually make your job easier, not harder!

                                                                  Tips for accessibility:

                                                                  • Pick the right widgets
                                                                    • Use Qt's widgets as these have accessibility support built-in
                                                                    • Pick the widget that is best suited to the task at hand, and customise if necessary
                                                                  • Define what widgets do
                                                                    • Remember, having a label near to the widget won't help people who can't see
                                                                    • Ensure all widgets have an accessible name and description
                                                                      • The name and description can be similar, but they mustn't be the same
                                                                      • A suitable example:
                                                                        • name: "Instrument list"
                                                                        • description: "List of instruments that can be added to the score"
                                                                  • Define the relationship between widgets
                                                                    • Make sure widgets handle focus correctly
                                                                    • Make sure the tab-ordering make sense for keyboard navigation
                                                                  • Test!
                                                                    • Install a screen reader (or enable the one that's built-in to your operating system) and try to navigate the interface using only the keyboard and with your eyes shut!

                                                                  Once the interface works for users with accessibility needs, then (and only then) you can go and make it look pretty!

                                                                  Screen readers on various platforms

                                                                  • Windows: Narrator (built-in), NVDA (free, better than Narrator at present)
                                                                  • Mac: VoiceOver (built-in)
                                                                  • Linux: Orca (part of GNOME and built-in on many distributions, including Ubuntu)

                                                                  Testing accessibility

                                                                  • Make sure that you can tab to each item and that the tab-ordering makes sense.
                                                                  • Check that the screen reader announces each widget when it receives tab focus.
                                                                  • Navigate the controls (e.g. Drop-down lists, TreeView) with the arrow keys and check that the highlighted item is spoken by the screen reader.

                                                                  Doing this will help users with accessibility needs, and it will also encourage you to think about how the widgets are related to each other, which often leads to a better design for all users.

                                                                  Accessibility bugs

                                                                  Sometimes you can do everything right in your code, but find that accessibility is still sub-optimal due to a bug in the UI framework (in this case Qt) or (more rarely) a bug in the screen reader. Try to use common sense to work out where the issue lies. If it's a Qt problem the consider submitting a bug report to Qt and then move on to doing something else while waiting for it to get fixed; don't waste time writing custom hacks in MuseScore's code in an attempt to "fix" Qt problems.

                                                                  Remember, Qt is supposed to give us accessibility "for free", by default for all the basic widgets (buttons, dropdowns, radiobuttons, treeviews, etc), without any effort on our part other than setting the accessible name and description. If a basic feature is not working there's a good chance it is a bug in Qt and not your code.

                                                                  Principles

                                                                  All designs for MuseScore should be checked against these principles.

                                                                  These principles are currently mostly copies of those set out by Mozilla.

                                                                  Accessibility

                                                                  This is the most important requirement, for the the simple reason that if you get accessibility right you get most of the other requirements for free! Accessibility is also a legal requirement in many jurisdictions.

                                                                  access

                                                                  The control interface must be accessible to users with disabilities and special needs. This includes:

                                                                  • People with limited mobility
                                                                    • anybody who cannot use both a mouse AND a keyboard at the same time
                                                                    • tip: avoid setting keyboard shortcuts that require two hands!
                                                                  • People who are colour blind or struggle with visual perception
                                                                    • tip: use highly contrasting colours to make it easy to tell things apart, but avoid using red and green together, and avoid using colour as the sole source of information
                                                                  • People who are reliant on Assistive Technologies (screen readers, Braille terminals, etc.)
                                                                    • anybody who is blind, partially sighted or otherwise unable to use the regular input devices (mouse and keyboard) or output devices (monitor and speakers) without assistance
                                                                    • tip: always ensure widgets have an accessible name and description, and a well defined relationship to one another
                                                                  • The elderly, and people with special cognitive needs
                                                                    • tip: use sensible defaults and keep advanced settings to one side to avoid making things unnecessarily complicated

                                                                  Remember, disability is extremely common! Around 1 in 5 people have some form of disability.

                                                                  Taking the time to get accessibility right encourages better design in general, which benefits everyone. Even if you don't use accessibility features, you might benefit if your keyboard/mouse/speakers/monitor stops working one day and you really need to access a score!

                                                                  Layout

                                                                  ux-discovery

                                                                  Users should be able to discover functionality and information by visually exploring the interface; they should not be forced to recall information from memory. [Source: Nielsen]

                                                                  ux-affordance

                                                                  Controls should visually express how the user should interact with them. [Source: Norman]

                                                                  ux-natural-mapping

                                                                  Controls should be placed in the correct location relative to the effect that they will have. [Source: Norman]

                                                                  ux-visual-hierarchy

                                                                  Controls that are more important or more commonly used should leverage visual variables such as size and contrast so that they have more dominance and weight relative to other controls.

                                                                  ux-minimalism

                                                                  Interfaces should be as simple as possible, both visually and interactively. Interfaces should avoid redundancy. [Source: Minimalism]

                                                                  ux-userfeedback

                                                                  Interfaces should provide feedback about their current status. Users should never wonder what state the system is in. [Source: Nielsen]

                                                                  ux-consistency

                                                                  All else being equal, software should be internally consistent with itself, and externally consistent with similar interfaces to leverage the user's existing knowledge. [Source: Nielsen]

                                                                  Behavior

                                                                  ux-efficiency

                                                                  Interfaces should be as efficient as possible, minimizing the complexity of actions and the overall time to complete a task. [Source: Nielsen]

                                                                  ux-control

                                                                  The software should not automate tasks contrary to the user's intents.

                                                                  ux-interruption

                                                                  Interfaces should not interrupt the user. Interfaces should never ask the user a question that they are not prepared to answer simply for a false sense of control. In general, software should only speak when spoken to.

                                                                  Error Prevention

                                                                  ux-error-prevention

                                                                  Interfaces should proactively try to prevent errors from happening. [Source: Nielsen]

                                                                  ux-undo

                                                                  Actions should support undo so that users remain in control.

                                                                  ux-mode-error

                                                                  Users should not encounter errors because the interface is in a different state than they expected it to be.

                                                                  ux-error-recovery

                                                                  Interfaces should proactively help users recover from both user errors and technology errors. (A preferable case is to address through ux-error-prevention so that the error does not occur). [Source: Nielsen]

                                                                  ux-implementation-level

                                                                  Interfaces should not be organized around the underlying implementation and technology in ways that are illogical, or require the user to have access to additional information that is not found in the interface itself. [Source: Nielsen, Cooper]

                                                                  Language

                                                                  ux-jargon

                                                                  Users should not be required to understand any form of implementation-level terminology. (This principle is a special case of ux-implementation-level). [Source: Nielsen]

                                                                  ux-tone

                                                                  Interfaces should not blame the user, or communicate in a way that is overly negative or dramatic.

                                                                  Developer group chats

                                                                    Discord

                                                                    MuseScore's Discord Server: https://discord.gg/HwHhXEbJ4r

                                                                    Join the Discord server to get in touch with the developers or hang out with the contributor community!

                                                                    If clicking the above link doesn't work as expected, try adding the invite manually within Discord.

                                                                    Who can join?

                                                                    You don't have to be a developer or contributor to join the Discord server: users are welcome to join too!

                                                                    However, if you are having difficulty using MuseScore's software we would prefer you to ask for help in the Support Forum, where content is easily searchable—but you are welcome to share a link to your forum post in the Discord server's #support channel so people can find it quickly.

                                                                    How to use the public channels

                                                                    The Discord server has multiple channels for text and voice chat. You can join a channel by selecting it in the channel list on the left of the screen. The description at the top of each channel page will tell you what that channel is used for.

                                                                    Available text channels

                                                                    CHAT
                                                                       #general
                                                                       #support
                                                                       #notation
                                                                       #playback
                                                                       #announcements
                                                                    DEV
                                                                       #design
                                                                       #development
                                                                       #translation
                                                                       #gsoc (Google Summer of Code)

                                                                    Available voice channels

                                                                       🔈 Ensemble

                                                                    Notifications

                                                                    You can pause notifications for a particular channel via the bell icon (🔔) in the top right of the channel page, or for the server as a whole by clicking on the server name "MuseScore" and choosing "Notification Settings". We recommend setting it to "Only @mentions" so that you will still be notified when somebody mentions you with @username.

                                                                    When a channel has unread messages, its name will be highlighted in the channel list. You can disable this highlight for channels you don't care about by using the Mute Channel option, also available via the notifications bell icon (🔔), or by muting the server as a whole in "MuseScore" > "Notification Settings".

                                                                    Voice channel instructions

                                                                    Please wear headphones to avoid creating an echo for other users, or mute your microphone when you are not speaking. Ideally, do both!

                                                                    You can also enable video in the voice chat or start screen sharing. During video calls, you will probably want to disable the option "Show non-video participants", which is available via a three dots menu in the top right.

                                                                    Discord_voice_chat_disable_show_non-video_participants.png

                                                                    The Grid / Focus button to the left of the three-dots menu is also useful.


                                                                    Old platforms (deprecated)

                                                                    The following are no longer in regular use for MuseScore development. They have been replaced by the Discord Server. Links to these groups have been removed to discourage people from joining.

                                                                    Telegram

                                                                    • Main development group chat

                                                                    This chat was used for on-topic discussion of MuseScore development, and anything directly related to it.

                                                                    • Off-topic chat

                                                                    This chat was used for off-topic 'water-cooler' discussion about anything and everything (save for MuseScore development discussions).

                                                                    • Translation chat

                                                                    Was used to discuss the translation and localization of MuseScore.

                                                                    • Design chat

                                                                    Was used to discuss changes to MuseScore's UI and notation rules.

                                                                    Internet Relay Chat (IRC)

                                                                    MuseScore used to use the #musescore channel on freenode.net, but we left in 2019 due to excessive spam. After the events of May 2021, Freenode has since been abandoned by many major open source projects that were previously using it.

                                                                    IRC Management

                                                                    If you have op rights:

                                                                    • please connect using a secured connection.
                                                                    • please do not stay op for long time

                                                                    Useful commands

                                                                    Get channel info
                                                                    /msg chanserv INFO #musescore

                                                                    Get temporary op
                                                                    /msg chanserv OP #musescore

                                                                    Give op rights to username
                                                                    /msg chanserv ACCESS #musescore add username +o

                                                                    Ban username with bad connection (it will redirect him to #fix_your_connection a special channel with instructions how to fix it)
                                                                    /mode #musescore +b username!@$##fix_your_connection

                                                                    Remove chanop status from username (do this for yourself when done)
                                                                    /mode #musescore -o username

                                                                    List ops
                                                                    /msg chanserv ACCESS #musescore list

                                                                    Display current topic
                                                                    /topic #musescore

                                                                    Change channel topic
                                                                    /topic #musescore [new content here]

                                                                    Change channel entry message
                                                                    /msg ChanServ SET #musescore ENTRYMSG [message]

                                                                    Development infrastructure

                                                                    Source code

                                                                    MuseScore source code is hosted on GitHub.

                                                                    Continuous integration

                                                                    Each pull request code is built on GitHub Actions for all platforms (Windows, Linux, and macOS), this way we make sure that the build is not broken.
                                                                    It also checks the style of the code and runs various tests.
                                                                    You can see these builds on the pull request page.
                                                                    If you are logged in to GitHub, you can download the built builds (artifacts) for testing.
                                                                    The artifact archive also contains various service data that was generated during the build.
                                                                    Build workflows are located in the .github/workflows directory
                                                                    The builds scripts are in build/ci directory.

                                                                    Automated development builds

                                                                    We used to call them "nightly builds" but they aren't so much "nightly" anymore.
                                                                    GitHub Actions is used to create development builds for all platforms (Windows, Linux, and MacOS) for the active branches. The packages are uploaded via FTP on https://ftp.osuosl.org/pub/musescore-nightlies/. Only the last 40 "nightlies" are kept there.

                                                                    File hosting

                                                                    The MuseScore binaries for stable are hosted by GitHub releases
                                                                    https://github.com/musescore/MuseScore/releases
                                                                    And nightly builds are hosted by Oregon State University Open Source Lab (OSUOSL). We have two shares there, https://ftp.osuosl.org/pub/musescore-nightlies/ and https://ftp.osuosl.org/pub/musescore/.
                                                                    For some other resources, MuseScore also has an Amazon Web Services (AWS) account and uses their Simple Storage Service (S3). The MuseScore Connect HTML page is hosted on S3, also MuseScore translations, as available in the resource manager, are hosted on S3. We also use S3 to host libraries (Qt and other dependencies) or tools (wkhtml2pdf) used to build MuseScore, generate PDF handbook etc...

                                                                    Mark issue as fixed automatically

                                                                    GitHub can send a POST HTTP request to any URL. MuseScore.org uses this feature to receive notification of every new commit on the branches of the Git repository. If the commit message (not the PR title) starts with "fix #xxxxx", with xxxxx the issue number in the issue tracker, the issue will be marked as fixed automatically (and as closed 14 days after the last update to it).

                                                                    Continuous translation and resource manager

                                                                    We're now using GitHub Actions to run a tx2s3 job periodically (every 15 minutes). The process takes TS files from Transifex converts them to QM files, bundles thjose into ZIP archives, one per language, and uploads those to S3. The Resource Manager in MuseScore connects to S3 to get the latest language updates.
                                                                    Here is the process to switch translations from one release to another release: https://docs.google.com/document/d/1KdhLVp8mFlFfxBsIiXHRd_lQMlFH7j3ol1X…

                                                                    Handbook as PDF

                                                                    The MuseScore handbook is written and translated on musescore.org. We also offer it as a PDF. The PDFs are hosted by OSUOSL and created daily by Travis-CI's cron capabilities (starting at 16:30 GMT, finishing some 20 minutes later) , using https://github.com/musescore/handbook2PDF

                                                                    Drumset (.drm) file documentation

                                                                    Drumset files (.drm) are used by the Edit Drumset dialog box for saving and re-loading drumset definitions.

                                                                    The definitions in a .drm file are XML and identical to the drumset definitions in an instruments.xml file.

                                                                    .drm file definition

                                                                    museScore

                                                                    The museScore element is the container for all of the drum elements.

                                                                    museScore attribute - version (required)
                                                                    The version is the version of the file format, not the version of MuseScore. This documentation applies to version 3.01.

                                                                    museScore element - Drum (multiple)

                                                                    Drum

                                                                    Defines a sound for an unpitched Instrument

                                                                    Drum attribute - pitch (required)
                                                                    The content is the MIDI note number (pitch) for the sound.

                                                                    Drum element - head (recommended unless noteheads is specified)
                                                                    The content is the notehead group to use for this sound. Specifying the notehead group number is deprecated: the notehead group name is required. The default and the fallback if the name is not recognized is normal.

                                                                    Each notehead group defines a set of four noteheads for "black" notes (quarter notes / crotchets and shorter), half notes (minims), whole notes (semibreves) and double whole notes (breves).

                                                                    The notehead group may be one of the standard groups for percussion
                                                                    normal, cross, plus, xcircle | withx, triangle-up, triangle-down, slash perc 0-7s.png
                                                                    slashed1, slashed2, diamond, diamond-old | circled, circled-large perc 8-13s.png

                                                                    or one of the oddities
                                                                    large-arrow, do, re, mi | fa, (no so), la, ti perc 14-20s.png

                                                                    Drum element - noteheads (optional)
                                                                    Sets the the noteheads for "black" notes (quarter notes / crotchets and shorter), half notes (minims), whole notes (semibreves) and double whole notes (breves) individually using internationally recognized names. noteheads takes precedence over head.

                                                                    noteheads has four, optional, elements defining the noteheads for each length note: quarter for "black" notes, half for half notes /minims, whole for whole notes / semibreves and breve for double whole notes / breves.

                                                                    The noteheads equivalent of the notehead group slashed2 is

                                                                        <noteheads>
                                                                            <quarter>noteheadSlashedBlack2</quarter>
                                                                            <half>noteheadSlashedHalf2</half>
                                                                            <whole>noteheadSlashedWhole2</whole>
                                                                            <breve>noteheadSlashedDoubleWhole2</breve>
                                                                        </noteheads>

                                                                    Any noteheads from the SMuFL ranges Noteheads, Slash noteheads, Round and square noteheads and Shape note noteheads can be used.

                                                                    For unpitched percussion instruments, you may only ever need black noteheads. If the notehead definition for any note length is omitted, the notehead defaults to normal.

                                                                    Drum element - line (recommended)
                                                                    The content is the staff line to use for this sound. 0 is the top line, 1 the top interline and so on. The default is -1. This is not guaranteed.

                                                                    Drum element - voice (recommended)
                                                                    The content is the preset voice to use for this sound: a number between 0 and 3, corresponding to staff voices 1 to 4. The default is 0 (staff voice 1). This is not guaranteed.

                                                                    Drum element - name (required)
                                                                    The content is the name of the sound. This is the tip text for the sound in the drum palette and name of the sound in the Edit drumset dialog box.

                                                                    Drum element - stem (recommended)
                                                                    The content is the preset stem direction: 0 for automatic. 1 for up and 2 for down. Defaults to up for voice 0 or 3 (staff voice 1 or 4) and defaults to down for voice 1 or 2 (staff voice 2 or 3).

                                                                    Drum element - shortcut (optional)
                                                                    The content is the shortcut for this sound which should be a letter between A and G.

                                                                    MuseScore 2.1 hit list

                                                                    Blocking issues

                                                                    • #188051: Regression: Removing the content of measures after deletion of the time signature causes corruption/crash
                                                                    • #188091: Regression: except A4, Layout / Page Settings: Landscape is impossible
                                                                    • #186666: Regression: Crash when pressing tie key in real-time mode with MIDI input/Piano keyboard
                                                                    • #190991: Scores get each other's titles on first edit after reordering tabs, crash on close

                                                                    New Features

                                                                    (If they don't cause regressions or if we can document them well enough)

                                                                    • Denemo-style rhythmic and semi-real-time-MIDI note input: shoogle [done]
                                                                    • #175461: Add commands: Shift-Q "Decrease duration dotted" and Shift-W "Increase duration dotted"
                                                                    • #174066: Why not add the lute functionality to 2.1 (especially bass courses)?
                                                                    • #176511: Allow fingerings in tablature staffs
                                                                    • #182586: Upload MuseScore audio rendition on MuseScore.com together with score
                                                                    • #187556: Allow wider-dashed and larger-dotted slurs/ties - fixed for master, include in 2.1?

                                                                    Regressions

                                                                    • #180171: Regression: cannot enter chords using onscreen piano keyboard
                                                                    • #181656: Regression: insert an horizontal frame leads to bad layout on undo
                                                                    • #181886: Regression: Continuous tuplet creating on same place causes crash
                                                                    • #192251: Regression: piano keyboard panel cannot be resized, excess white space above and below
                                                                    • #185876: Regression: use of navigator affects all open scores
                                                                    • #184256: Regression: unexpected display in "Preview" of Tab staff for instruments of less than 6 strings/lines
                                                                    • #186386: Regression: pitches in Edit Drumset not sorted in numeric order
                                                                    • #186876: Regression: notes for bass guitars show in wrong octave in normal staff vs. tablature staff
                                                                    • #187136: Regression: Shortcuts for "Increase/Decrease active duration" don't work
                                                                    • #187366: Regression: Save Online dialog has excess space between changelog and Save/Cancel buttons
                                                                    • #187386: Regression: Save Online shows 'upload audio' when updating score, regardless of default synthesitzer settings

                                                                    Windows packaging

                                                                    • #87751: Windows Installer : add option to install MuseScore for all users/single user
                                                                    • #83421: MSI Silent install does not install correctly
                                                                    • #87746: Windows Installer: add option to install the desktop shortcut
                                                                    • #186426: Windows installer: taskbar icon not updated in 2.2
                                                                    • #186431: Change registry key FriendlyAppName to "MuseScore 2.1"
                                                                    • #193526: Create APPX for Windows Store
                                                                    • #186571: License in installer shows copyright 2015 rather than 2017

                                                                    Crashes and Corruptions

                                                                    • #183816: Changing Time Signature causes existing measure rest to move
                                                                    • #181811: Instrument name with & doesn't save as &amp; if edited by double-click, causing unopenable file
                                                                    • #112656: Crash when opening score with a duplicate Glissando
                                                                    • #178176: Hang/crash by extending a glissando on a note with another one in the second staff
                                                                    • #151711: Remove a time signature in a part causes corruption in the other parts and main score
                                                                    • #97106: Crash when undo after save in a score with parts and courtesy key sig
                                                                    • #176151: Multibyte chars are not deleted correctly in text
                                                                    • #176601: Multibyte chars are not inserted correctly in text
                                                                    • #173366: Copy-paste a multimeasure rest when the number exceeds the remaining measures causes a crash
                                                                    • #167416: Cut a measure with triplets after inserting a new measure causes corruption/crash
                                                                    • #154591: Crash when loading palette with small width/height grid
                                                                    • #164671: Crash when changing "spanned staves" from 2 to 1 in the Inspector
                                                                    • #163691: Crash after removing and undoing a staff in file with elements linked to themselves
                                                                    • #83446: Closing a file after multiple delete of ties in file imported from MIDI causes crash
                                                                    • #105951: CRASH on close score after deleting all segment of a spanner
                                                                    • #121561: Score corruption when creating tremolos in Score+Parts
                                                                    • #99146: File > Save Selection… leads to corrupt score if selection is not 4/4 and does not start with time signature
                                                                    • #151521: Crash due to bad selection after undo of operation originally performed in linked score
                                                                    • #119041: Font name containing a ampersand will corrupt file
                                                                    • #192946: crash when selecting corrupt measure

                                                                    Let's have another look

                                                                    • #109021: Hairpin and other symbols are shifting when relayout occurs
                                                                    • #117191: [Windows] Font kerning issue with lyrics in 2.0.3 not present in 2.0.2
                                                                    • #39601: Poor scaling of GUI on high resolution displays
                                                                    • #106241: Monitor resolution detected incorrectly, making sizes wrong
                                                                    • #9352: Add ability to set transposition by range
                                                                    • #4954: Change instrument via staff properties doesn't affect clef
                                                                    • #118731: Text styles not applied after Load Style...
                                                                    • #51741: handling slashes for time signatures where denominator >8 and numerator not divisible by 3
                                                                    • #109066: Double-click sliders in play panel or synthesizer sets them to zero
                                                                    • #187151: Hairpins shifting out of position on systems containing ties from stem - fixed for 2.1
                                                                    • #188461: Bad tie lengths on mirrored end notes - fixed for 2.1
                                                                    • #188061: Values in sp unit don't remain unchanged after changing spatium - fixed for 2.1
                                                                    • #62416: Changes to staff transposition (and other properties) not reflected in linked parts

                                                                    Export

                                                                    • #186706: [XML export] export 7sus(4) chord to MusicXML fails reimport: "Element degree contains unknown attribute text."

                                                                    Import

                                                                    • #175226: [MusicXML import] add instrument-sound to MIDI mapping

                                                                    Tasks

                                                                    • #153906: Update templates for 2.1
                                                                    • #165281: Update FLuidR3Mono to the latest version before releasing 2.1
                                                                    • #135791: Dynamics text style should be italic
                                                                    • Update translations

                                                                    View release notes draft here.

                                                                    Follow commits to 2.1 here.

                                                                    MuseScore product description

                                                                    Keywords

                                                                    music, notation, software, free, open source, composition, composing, arranging, making, sheet music, lead sheet, leadsheet, score, full score, scorewriter, sibelius, finale, capella, midi, musicxml, print, playback

                                                                    45 char description

                                                                    Create, play, and print sheet music for free

                                                                    80 char description

                                                                    Create, play back, and print sheet music with free open source notation software

                                                                    250 char description

                                                                    Create, play back, and print sheet music for free. MuseScore is cross-platform, multi-lingual, open source music notation software. It features an easy to use WYSIWYG editor with audio score playback for results that look and sound beautiful.

                                                                    450 char description

                                                                    Create, play back, and print sheet music for free. MuseScore is cross-platform, multi-lingual, open source music notation software. It features an easy to use WYSIWYG editor with audio score playback for results that look and sound beautiful. It supports unlimited staves with up to four voices each, dynamics, articulations, lyrics, chords, lead sheet notation, import/export of MIDI and MusicXML, export to PDF and WAV, plus online score sharing.

                                                                    2000 char description

                                                                    Create, play back, and print sheet music for free. MuseScore is open source music notation software that runs on Windows, MacOS, and Linux, and is available in over fourty different languages. It features an easy to use WYSIWYG editor with audio score playback for results that look and sound beautiful, rivaling commercial offerings like Finale and Sibelius.

                                                                    Features supported by MuseScore include:

                                                                    Unlimited score length
                                                                    Unlimited number of staves per system
                                                                    Up to four independent voices per staff
                                                                    Score creation wizard and templates
                                                                    Automatic part extraction and transposition
                                                                    Repeats, including segnos, codas, and measure repeats
                                                                    Dynamics, articulations, and other expression markings, with playback support for most
                                                                    Custom text markings
                                                                    Lyrics
                                                                    Chord symbols
                                                                    Jazz notation, including lead sheets, slash notation and a “handwritten” font for text
                                                                    Swing and shuffle playback
                                                                    Mixer for instrument levels and effects
                                                                    Percussion notation
                                                                    Early music notation
                                                                    Cross-staff beaming
                                                                    Import of graphics
                                                                    Custom key signatures
                                                                    Additive time signatures
                                                                    User-defined score styles

                                                                    Most elements in MuseScore are laid out automatically but can also be positioned manually. The capabilities of MuseScore can be extended via plugins, and the growing repository on musescore.org contains many plugins submitted by users.

                                                                    MuseScore includes a set of sounds that reproduce common instruments (as defined by General MIDI) without taking up a lot of disk space or memory, but you can also substitute any SoundFont you prefer for a wider variety of sounds or for more realism.

                                                                    MuseScore can import and export MIDI and MusicXML files, and it can also import from Capella and several other programs. MuseScore can export to PDF, PNG, and other graphic formats, to WAV and other audio formats, or to Lilypond for an alternative layout and print option.

                                                                    MuseScore can upload scores directly to the score sharing site musescore.com. Program support is provided on musescore.org.

                                                                    MuseScore roadmap

                                                                    MuseScore 3

                                                                    3.6

                                                                    3.6.2 released.

                                                                    3.6.x

                                                                    We expect a few patch releases providing bugfixes to the 3.x branch whilst MS4 development is ongoing.

                                                                    3.7

                                                                    There is no intention to create a 3.7 release. New features must be developed against MS4

                                                                    MuseScore 4

                                                                    Main goals:
                                                                    * UX improvements
                                                                    * modularisation of code

                                                                    Basically, normal improvements are expected to libmscore and import/export modules. All other modules are subject to architectural refactoring.

                                                                    From nightly to release

                                                                    Patch releases are usually jump straight from nightly to final release. Minor and major releases follow the stadia listed below:

                                                                    Nightly

                                                                    Automatic builds per commit/PR. Anything goes and anything may break (but shouldn't of course ;-) )

                                                                    Alpha

                                                                    Tech-preview release. Stability is not guaranteed. Allows testing of new features by a broader audience.
                                                                    A minor release may have an alpha release if it packs big new features.
                                                                    A major release can have multiple alpha releases to tease ongoing development progress

                                                                    Beta

                                                                    Test release. Should be fairly stable. At this point some "must have/fix" issues have been identified and most should be included in this release.
                                                                    From now on, only bugfixes and low-risk features will be eligible for inclusion. Bugfixes that don't address a "must fix" issue should also be quite low-risk; otherwise they will be pushed out to the next (patch) release

                                                                    Release Candidate

                                                                    Meant for broad testing.
                                                                    Only required if changes have been made since Beta. Expected to be stable. At this point only critical bugfixes are still allowed

                                                                    Final Release

                                                                    RC + eventual critical bugfixes

                                                                    Remarks for MuseScore3, bugs, issues

                                                                    TODO's

                                                                    • the Qt state machine abstraction was removed in 3.x. The original goal to more abstract and simplify the code could not be achieved. The qt solution was replaced by an "in line" implementation which is simpler and easier to maintain.
                                                                      During the transition some code was commented out resulting in some state transitions currently not working. For example some drag/drop operations may not work right in some states.

                                                                    • Tablature needs testing, has likely regressions.

                                                                    • Implementation of scripting interface is incomplete. The current regression tests reflect the status of implementation.

                                                                    • Due to many problems with QTextDocument, the class was replaced by an own implementation. The current implementation is incomplete. Only simple text editing works. Undo/Redo does work only for simple operations.

                                                                    • More style values need to be added to several elements. A style value may also have an corresponding element property. The inspector dialog and the style dialog needs to be updated along.

                                                                    • Import of 2.x and other formats needs to be tested. For this probably more regression tests are needed to get a better test coverage. 2.x scores will look different when loaded with 3.x. Especially the placement of manually moved elements will be different.

                                                                    • Remove the ability to define a Symbol as a list of Symbols. This was implemented to be able to compose a symbol out of other symbols. Its not necessary anymore as smufl (and bravura) now define all necessary combined symbols. MuseScore symbol names for this combined symbols should be replaced by smufl names.

                                                                    • Album feature is only implemented 10%. Old album features are removed.
                                                                      Finishing this is a bigger task. Maybe this can be postponed after 3.0 release.

                                                                    • Autoplacement: the current status looks good to me but test coverage is hard to number. I expect lots of bug reports when users try to enter real scores.

                                                                    • Collision detection: the code is yet not optimized. The algorithmic behaviour of collision detection is quadratic. This means that if the number of elements double we need four times the time to detect a collision. This is ok for small numbers of elements but there is a risk this will not scale well for more complicated scores.

                                                                    • In 3.x text styles were removed because they do not fit well in the new scheme of property and style values. Somehow they are reintroduced as sets of style values. The current implementations hardcode some style sets as user1 user2 etc. to enable some of the previous text style functionality. This could be extended to allow arbitrary user-defined style sets. For this a gui similar to the old text styles would be needed.

                                                                    • Program Documentation: Better document the element interface to property and style values.

                                                                    • Code cleanups: check for consistent use of the documented interface.

                                                                    • Testing: Coverage of our regression tests and also the visual tests is low and should be enhanced. We have currently no way to test regressions during user interaction. Implementing a way to record and playback user interaction (events) would be helpful. Any attempt to implement something like this has failed so far.

                                                                    *Inspector: It's not yet defined how the inspector should handle multiple selections. We should distinguish homogeneous (selection of same element types) and inhomogeneous (selection of mixed types).

                                                                    • Debugger: the internal debugger is not very up to date. I believe it is a useful tool and deserves some love.

                                                                    • Notation symbols: add more symbols from the smufl font to palettes.

                                                                    • Properties, Styles: add more properties and style values. Check the program for hardcoded values and replace them by style values. Especially style values to change the autoplace behaviour may be incomplete.

                                                                    • Profiling: the new layout engine together with collisions detection and autoplacement needs profiling to locate hot spots. It's important for a good user experience to make layout fast as possible.

                                                                    • MuseScore 2.0 had "MuseScore connect" a browser window in the start center where we could display scores, information, ads for "Mastering MuseScore", tutorials. It relied on Qt Webkit which doesn't exist anymore in Qt 5.9. It has been replaced by QtWebEngine which doesn't work on Mingw Windows. In order to solve that, we need to re-implement "MuseScore Connect" with another technology (QML/QtQuick?Widget?) or compile MuseScore with Visual Studio to make use of QtWebEngine, or try something else (Qt WebView ?)

                                                                    Regressions in visual tests

                                                                    • frametext (ok)
                                                                      Check text alignment of topLeft Lyricist topRight Composer
                                                                    • slurs-*
                                                                      Autoplace for slurs is work in progress. Some slurs look bad/wrong.
                                                                    • chord-layout-14
                                                                      The augmentation dot distance for small notes seem to be to large.
                                                                      This seems to be a bug for me. (Also present in 2.x)

                                                                    • harmony-1
                                                                      Collisions between harmony elements

                                                                    • harmony-2
                                                                      Chord name (harmony) and fret diagram are stacked in wrong order
                                                                    • harmony-3, harmony-5, harmony-7/8/9/10/11
                                                                      Check style for vertical default position.
                                                                    • beams-1
                                                                      slant should be zero for third beam
                                                                    • beams-9
                                                                      size for first staff is wrong
                                                                    • user-offset-2
                                                                      layout is wrong
                                                                    • image-1
                                                                      change file format to mscz as mscx does not support images
                                                                    • lyrics
                                                                      LyricsLine is not handled right in autoplace. The line vertical position is wrong.
                                                                    • lyrics-6
                                                                      Lyrics are cut on the left if they do not fit on page
                                                                    • slash-1, slash-2
                                                                      stem direction and anchor point is wrong
                                                                    • system-5
                                                                      System bracket is misplaced
                                                                    • system-7
                                                                      Instrument name on second system is missing. Hide staff only if complete instrument is empty?
                                                                    • hide-1
                                                                      barline is missing
                                                                    • small-1
                                                                      trill, gliss etc. is too big in small staff
                                                                    • tremolo-1
                                                                      layout broken
                                                                    • layout-5
                                                                      Should there be a clef?

                                                                    Release check list

                                                                    The goal is to produce release packages for the following platforms and advertise the new release

                                                                    • Windows (MSI, signed)
                                                                    • Windows Store (APPX)
                                                                    • AppImage for Linux (at least x86_64)
                                                                    • macOS (DMG, signed)
                                                                    • Source tarball (ZIP)

                                                                    Steps

                                                                    • Write or update release notes
                                                                    • Prepare announcement, like e.g. https://musescore.org/en/2.2

                                                                    • Update translations: manually get translations from transifex and push them to github in the relevant branch

                                                                    • Convert the templates from mscx to mscz, e.g. by using mscore --templatemode -j share/templates/convert.json
                                                                    • Make sure that Windows CPACK_WIX_PRODUCT_GUID is different from previous versions in build/Packaging.cmake
                                                                    • Make sure the Product Version is right in WIX template
                                                                    • Mark MuseScore as stable, make sure the right version number is set in CmakeLists.txt and Makefiles and commit, like e.g. 9c73a21
                                                                    • Make sure the splash screen has the right version
                                                                    • Tag the release on GitHub

                                                                    • Travis should create AppImages and DMG file.

                                                                    • Verify AppImages
                                                                    • Verify DMG, in particular check that the signing is correct
                                                                    • Verify that the DMG uses the right MuseScore.com keys

                                                                    • On Windows, AppVeyor should create the MSI package and store it to mscore-nightlies FTP

                                                                    • For Windows store

                                                                      • Build with BUILD_FOR_WINSTORE = ON
                                                                      • Package using Microsoft tools and submit
                                                                      • Wait up to 2 days for MS to validate the build
                                                                      • Fix issue and resubmit until accepted…
                                                                    • For the source package, it's created by the test job on Appveyor and uploaded to mscore-nightlies FTP (src directory) It should contains the right version in revision.h and the correct soundfont.

                                                                    • Test packages on Virtual machines, especially the windows one.

                                                                    • Packages should all be on mscore-nightlies FTP share for example and have them tests by  the close community as much as possible. Stuff to test:

                                                                      • MSI, upgrade path
                                                                      • OS integration: sound…
                                                                      • MuseScore.com integration
                                                                    • When all packages are done, tested. Compute SHA 256 for each package. It will be used on download page to verify integrity

                                                                    • Upload to

                                                                      • ftp.osuosl.org
                                                                      • sourceforge.net
                                                                    • Upgrade our services

                                                                      • Upgrade MuseScore.com general and audio backend
                                                                      • Upgrade MuseScoreVideo and backend
                                                                      • Upgrade audiveris backend
                                                                      • Upgrade the mobile apps
                                                                    • Announce new release on MuseScore Connect

                                                                    • Update http://update.musescore.org
                                                                    • Mail announcement on developers mailing list
                                                                    • Announcement on IRC & Telegram
                                                                    • Mail to package managers : http://musescore.org/en/developers-handbook/distribution-maintainers

                                                                    • Make blog post for musescore front page

                                                                    • Translate and call for translators for post on musescore front page

                                                                    • Check and list Release Notes translation
                                                                    • Update http://musescore.org/en/download and translations

                                                                    •  MuseScore Newsletter

                                                                    • Update the pad.xml file

                                                                    • Whitelist request to antivirus companies

                                                                      • https://secure.avg.com/submit-sample
                                                                      • https://www.avast.com/faq.php?article=AVKB229
                                                                    • Update some of these product page, or verify they use the pad.xml file https://del.icio.us/musescore/productpage. In particular

                                                                      • Macupdate
                                                                      • majorgeek
                                                                    • Contact blogs and newspapers

                                                                    Text style guide

                                                                      Introduction

                                                                      This document attempts to clarify the various language and stylistic decisions of the English version of the MuseScore user interface. It is initially focused on the MuseScore strings maintained in Transifex, but should be applicable to documentation.

                                                                      Text capitalization

                                                                      Title capitalization

                                                                      is when all words are capitalized except for certain words. Capitalize all words except the following if they are not the first word of the sentence:

                                                                      • Articles ("the", "a" and "an")
                                                                      • Conjunctions ("and", "or" and "but")
                                                                      • Prepositions having less than five letters, (e.g. "for", "in", "with" or "to", "from" or "under"). It includes "to" as part of an infinitive ("to Walk"). But it excludes the preposition part of a verb phrase, as in “Starting Up the Program.”

                                                                      Sentence capitalization

                                                                      Sentence style capitalization is when the first letter of the sentence, statement, phrase, or label is capitalized and all other words are lower case. The only exception to this is proper nouns which are always capitalized.

                                                                      When to use sentence and title capitalization

                                                                      Control Capitalization
                                                                      Accessibility information Sentence
                                                                      Button label Title
                                                                      Checkbox label Sentence
                                                                      Combo box item Title
                                                                      Combo box label Sentence
                                                                      Group box title Title
                                                                      Menu item Title
                                                                      Page names Sentence
                                                                      Tooltips Sentence

                                                                      Word capitalisation

                                                                      • Only abbreviations should be capitalized.
                                                                      • Non-abbreviation words should use title or sentence capitalisation as per the above guidelines.

                                                                      Language

                                                                      • Standard: US English (we have a British English 'translation' to cover the differences)

                                                                      Parenthesis brackets

                                                                      • Standard: Use round brackets () for parenthesis, not square brackets [].
                                                                      • Exception strings (have not queried them yet)
                                                                        [%1Link%2]
                                                                        ~no patch~
                                                                      • Discussion: Forum: Inconsistency: square brackets used for [Tablature], round brackets for (Tab)

                                                                      Space between full stop and new sentence

                                                                      • Single space between the full stop of one sentence and the beginning of the next. Like this. And this.
                                                                      • Discussion: #281028 Transifex string corrections #2 (double spaces)

                                                                      Elipsis versus three dots

                                                                      • It is common to indicate a dialog behind a menu item using ellipsis which are almost indistinguishable from three dots.
                                                                      • Our standard: Ellipsis … "&hellip;", not 3 dots ... .
                                                                      • Discussion: Forum: Using ellipsis character (…) instead of three dots (...)

                                                                      Comma before "and" in lists of 3 or more items

                                                                      • We follow the Serial comma, a.k.a. Hardvard comma convention.
                                                                      • Discussion: Issue #280919: Transifex string corrections #1
                                                                      • Note: This is an English guide only. Translators should follow the rules and guidance for their respective languages.

                                                                      Quotes: single versus double quotes

                                                                      • Standard: none yet
                                                                      • Define one of the TS-files wth variable $PO (does not have to be translated since we are looking at the source)
                                                                        • Single quotes ', "&apos;": 160
                                                                          grep "<source>" $IF | grep "&apos.*&apos" | less
                                                                        • Double quotes ", "&quot;": 9
                                                                          grep "<source>" $IF | grep "&quot.*&quot" | wc -l
                                                                      • Discussion: todo (single quotes have advantages inside C/C++ strings, in that they don't need to get 'escaped', i.e. no need to prefix with a \, backslash, like \")

                                                                      Submenu separator

                                                                      • Standard: use > ("&gt;", greater than) sign between menu items.
                                                                      • Other separators like , (comma) or / (slash) should be avoided since they have different meanings and can cause ambiguity.
                                                                      • Discussion: Issue #280470 Inconsistent reference to menu entry navigation

                                                                      Resources

                                                                      • OpenOffice.org User Interface Text Style Guide
                                                                      • Qt creator UI Text Guidelines
                                                                      • KDE Human Interface Guidelines
                                                                      • Apple HIG - Text

                                                                      User Handbook PDF generation

                                                                      The musescore.org website offers a printable friendly version of the handbook for each language. For english, it's here https://musescore.org/en/print/book/export/html/36546?pdf
                                                                      It also provide a cover page https://musescore.org/en/handbook-cover

                                                                      The project https://github.com/musescore/handbook2PDF runs every day on Travis-CI, downloads handbook and cover page for each language and uses https://wkhtmltopdf.org/ to create a PDF. The PDF is then uploaded to the musescore-nightlies share of the OSUOSL FTP.

                                                                      The TOC for the PDF is generated with this XSL file https://github.com/musescore/handbook2PDF/blob/master/custom.xslt

                                                                      The whole generation process is open source, feel free to contribute improvements.

                                                                      Versions Reference

                                                                        Introduction

                                                                        If it is a table and relates to versions, and which X is supported by Y, it can go here (or for existing pages, link from here). Also allows us to track the edge cases where we are de-supporting a particular OS (permanently or potentially only temporarily) and what the reason for the de-support is.

                                                                        OS versions supported, MuseScore version and Qt version that they are built against

                                                                        • Versions that are "known to work". For versions that are officially supported by these Qt versions, see below
                                                                        • Qt Long Term Support (LTS) version in Bold
                                                                        MuseScore version Qt Version OS Note
                                                                        4.4.3 6.2.9 Windows 10 or higher 64-bit only macOS/Linux will switch to Qt 6.2.9 with the MuseScore 4.5 release
                                                                        4.4 6.2.4 Windows 10 or higher 64-bit only, macOS 10.14 or higher, Linux See MuseScore is switching to Qt 6
                                                                        4.0 - 4.3 5.15 Windows 10 or higher 64-bit only, macOS 10.14 or higher, Linux The ability to run MuseScore on 32-bit Windows and macOS 10.13 has been removed due to planned future upgrade of MuseScore post 4.0 to Qt 6.x. Qt 6.x drops support for these operating systems. See Github [MU4 Issue] nightly does not run on macOS 10.13 #8858. Windows 8 64-bit is not supported by Qt 5.15 (but should work). Windows 7, 8.1 64-bit are not supported by Qt 6. Report required whether or not they are working. Windows 11 not mentioned (but should work).
                                                                        3.x 5.9 Windows 7 or higher, macOS 10.10 or higher, Linux Windows 8 is not supported (but should work), Windows 11 not mentioned (but should work)
                                                                        2.x 5.4 Windows 7 or higher, macOS 10.7 or higher, Linux Last MuseScore version known to work with Windows XP and Vista, albeit unsupported
                                                                        1.x 4.8 Windows XP or higher, macOS 10.4, 10.6 or higher, Linux

                                                                        OS versions that are not supported on MuseScore

                                                                        OS Last supported MuseScore version First unsupported MuseScore version Qt Version Note
                                                                        Windows 7, 8.1, 10, 11 32-bit 3.6.2 4.0 5.9/5.15 Windows versions not supported by Qt 6.x
                                                                        macOS 10.10 - 10.13 3.6.2 4.0 5.9/5.15 macOS versions not supported by Qt 6.x
                                                                        Windows XP, Vista 2.3.2 3.0.0 5.4 Windows versions not supported by Qt 5.9/5.12
                                                                        macOS 10.7 - 10.9 2.3.2 3.0.0 5.4 macOS versions not supported by Qt 5.9/5.12, no future plans to support.
                                                                        Linux (32-bit) 2.3.2 3.0.0 5.4 32-bit Linux not supported by Qt 5.9/5.12.

                                                                        MuseScore version detail

                                                                        • Includes version, MSCX file version, release date and revision

                                                                        Qt versions and OS supported versions

                                                                        • Qt Long Term Support (LTS) in Bold

                                                                        Note: QtT 6.0 is not planned for use in development in the near future (as of December 2020) but listing its versions supported (and by implication dropped) is still useful. It is not an LTS version either, 6.2 will be though.

                                                                        Qt version OS Versions Architectures Note
                                                                        6.7 macOS 11+ x86_64, x86_64h, and arm64 drops 10.15
                                                                        6.4 macOS 10.15+ x86_64, x86_64h, and arm64 drops 10.14, MuseScore Studio 4.4 is based on this
                                                                        6.2 Windows 10 x86_64, arm64 no 32-bit
                                                                        6.2 macOS 10.14, 10.15, 11.0 x86_64, x86_64h, arm64 Support for Mac M1 chip
                                                                        6.2 Generic Linux Compiler: GCC 9 x86_64
                                                                        6.0 & 6.1 Windows 10 x86_64 no 32--bit
                                                                        6.0 & 6.1 macOS 10.14, 10.15, 11.0 x86_64 and x86_64h
                                                                        6.0 & 6.1 Generic Linux Compiler: GCC 9 x86_64
                                                                        5.15 Windows 7, 8.1, 10 x86 and x86_64
                                                                        5.15 macOS 10.13, 10.14, 10.15 x86_64 and x86_64h
                                                                        5.15 Generic Linux Compiler: GCC 5 or later, ICC 18.x x86_64
                                                                        5.12 Windows 7, 8.1, 10 x86 and x86_64 Qt version supported until Dec 6, 2021
                                                                        5.12 macOS 10.12, 10.13, 10.14 x86_64 and x86_64h
                                                                        5.12 Generic Linux Compiler: GCC 4.8, GCC 4.9, GCC 5, GCC 6, GCC 7 x86_64
                                                                        5.9 Windows 7, 8.1, 10 x86 and x86_64 Qt version supported until May 31, 2020
                                                                        5.9 macOS 10.10, 10.11, 10.12 x86_64 and x86_64h
                                                                        5.9 Generic Linux Compiler: GCC 4.8, GCC 4.9, GCC 5.3 x86_64 64-bit only
                                                                        5.8 Windows 7, 8.1, 10 x86 and x86_64
                                                                        5.4 Windows XP
                                                                        5.4 Windows Vista, 7, 8 32-bit and 64-bit MuseScore 32-bit only (but an unsupported 64-bit version is available)
                                                                        5.4 macOS 10.7, 10.8, 10.9, 10.10 x86_64
                                                                        4.8 Windows XP, Vista 32-bit
                                                                        4.8 macOS 10.6, 10.7 x86_64

                                                                        Macs and maximum macOS versions

                                                                        • Sample data from MacTracker.
                                                                        • Excludes Mac Pro, Mac Mini, since the maximum macOS tend to largely correspond with the same year for all Macs released in the same year. E.g. this is not an exhaustive list of all models but gives a broad indication of which model-years will be affected by a de-support decision.
                                                                        • Even though macOS 10.10 is the oldest supported on Qt 5.9, macOS 10.11 is the latest supported by this generation of Macs from 2007-2009.
                                                                        • The step up in model year and max. macOS is 2010/2011 with max. macOS 10.13. Even though Qt 5.12 supports macOS 10.12, those users would have upgraded to 10.13 already.
                                                                        • All models that are compatible with macOS 10.14 are also compatible with macOS 10.15. E.g. you will not see any models for which 10.14 is the maximum macOS version.
                                                                        Year released Type Maximum macOS version Maximum MuseScore version
                                                                        2016+ MacBook 12 4.x
                                                                        2015+ iMac 12 4.x
                                                                        2015+ MacBook Air, MacBookPro 12 4.x
                                                                        2015 MacBook 10.11 3.6.2
                                                                        2014 iMac 11 4.x
                                                                        2013 iMac 10.15 4.x
                                                                        2013 MacBook Air, MacBookPro 11.6 4.x
                                                                        2012 MacBook Air, MacBookPro, iMac 10.15 4.x
                                                                        2011 MacBook, MacBook Air, Macbook Pro, iMac 10.13 3.6.2
                                                                        2010 MacBook, MacBookPro, iMac 10.13 3.6.2
                                                                        2009 MacBook, MacBookPro, iMac 10.11 3.6.2
                                                                        2008 MacBookPro, iMac 10.11 3.6.2
                                                                        2008 MacBook 10.7 2.3.2
                                                                        2007 MacBookPro, iMac 10.11 3.6.2
                                                                        2007 MacBook 10.7 2.3.2
                                                                        2006 MacBook, MacBookPro, iMac 10.7 2.3.2

                                                                        Windows support cycle

                                                                        • Windows lifecycle fact sheet
                                                                        Year released Windows version OS vendor supported Supported until Maximum MuseScore version
                                                                        2021 11 64-bit Yes not announced 4.x
                                                                        2015 10 64-bit Yes 2025-10-14 4.x
                                                                        2015 10 32-bit Yes 2025-10-14 3.6.2
                                                                        2013 8.1 Yes 2023-01-10 3.6.2
                                                                        2012 8 No 2016-01-13 3.6.2
                                                                        2009 7 No 2020-01-14 3.6.2
                                                                        2007 Vista. No 2017-04-17 2.3.2
                                                                        2001 XP No 2014-04-08 2.3.2

                                                                        Zerberus, The MuseScore SFZ synthesizer

                                                                        History

                                                                        Since MuseScore 2.0, MuseScore includes 2 synthesizers: One for SF2/SF3 named Fluid and one for SFZ named Zerberus.

                                                                        Zerberus was first implemented by Werner Schweer in 2013/2014 for MuseScore 2.0 and it was only supposed to play the Salamander Piano SFZ back then. Zerberus has been greatly improved by hpfmn during Google Summer of Code 2016. He documented the supported opcodes, added support for more opcodes, tested it with several free SFZ and even experimented with Disk Streaming

                                                                        SFZ format

                                                                        The SFZ format is a plain text format first documented in "Cakewalk Synthesizers: From Presets to Power User" by Simon Cann (Chapter 13). The LinuxSampler project started an open documentation but it's far from complete. Also sfzformat.com has the beginning of the documentation.

                                                                        An important note : several popular SFZ players added more non documented opcodes. In particular, the Aria Engine (see below) implements several custom opcodes that are popular among SFZ creators.

                                                                        Free SFZ synthesizer

                                                                        • Linux Sampler
                                                                        • SFZero

                                                                        Popular non free SFZ player

                                                                        • The original SFZ by RCG audio and SFZ+

                                                                        • Aria Engine is a popular SFZ player engine. It's used in particular in Sforzando a free as in beer player available standalone and as VSTi/AU/RTAS/AAX . The Garritan Orchestra, now owned by MakeMusic, is also powered by the Aria Engine.

                                                                        • Kontakt by Native Instrument can import SFZ files but my (lasconic) understanding is that they are converted to Kontakt proprietary format in order to be played.

                                                                        Other references

                                                                        • List of opcodes supported by Linux Sample and by Zerberus
                                                                        • List of free SFZ tested with Zerberus by hpfmn

                                                                        Personalizzare le tavolozze

                                                                        Le seguenti pagine riassumono le funzionalità della prossima, imminente, versione di MuseScore. Queste funzioni sono disponibili solo per i test nelle ultime nightly builds .

                                                                        Personalizzare le Tavolozze

                                                                        Premendo con il tasto sinistro del puntatore , e tenendo premuto, sul nome di una tavolozza si apre la sua finestra di dialogo. Sono disponibili diverse opzioni:

                                                                        • Proprietà tavolozza
                                                                          Cliccando su questa voce si apre la finestra di dialogo proprietà tavolozza .
                                                                          paletteCreate.png
                                                                        • Inserisci nuova tavolozza
                                                                          Crea una tavolozza nuova che è possibile riempire con elementi di quella originale, di altre o con elementi della partitura.
                                                                        • Spostare le tavolozze
                                                                          Selezionare una tavolozza e trascinarla in alto o in basso nell'elenco a discesa.
                                                                        • Attiva modifiche
                                                                          Seleziona questa opzione per modificare il contenuto della tavolozza. Per impostazione predefinita, per evitare modifiche accidentali, è impostata su "disabilita".
                                                                        • Salva tavolozza
                                                                          Apre una finestra di dialogo da cui salvare le nostre modifiche.
                                                                        • Richiamare tavolozza
                                                                          Apre una finestra di dialogo da cui importare il relativo file.
                                                                        • Elimina tavolozza

                                                                        Cliccando con il tasto destro del mouse sotto l'elenco delle tavolozze si apre il menu contestuale delle tavolozze. Il menu consente di modificare le loro caratteristiche o riportarle alle impostazioni predefinite.

                                                                        • Modalità tavolozza unica: Se selezionato consente l'apertura di un'unica tavolozza.
                                                                        • Ripristina impostazioni predefinite: Sostituisce tutto l'insieme Tavolozze con quello predefinito. Attenzione: questo cancella tutte le modifiche apportate alle tavolozze.

                                                                        Nuove funzionalità di MuseScore 2.0 [[nodetitle: Nuove funzionalità di MuseScore 2.0 – Notazione del basso continuo|succ.]]

                                                                        upload
                                                                        Attachment Size
                                                                        paletteCreate.png 6.59 KB

                                                                        Meet the MuseScore Contributors

                                                                          MuseScore would never become the incredible software without the invaluable efforts and insights of our contributors. While many of you know some of our contributors only by nickname, we would like to introduce them so you may know them more personally.

                                                                          Original Founders

                                                                          The "founding trio" retired from MuseScore in 2019 and are no longer actively involved in the project.

                                                                          Werner Schweer (@wschweer, @werner)

                                                                          Former Lead Developer and BDFL

                                                                          Thomas Bonte (@thomasbonte, @thomas)

                                                                          Former CEO and Webmaster

                                                                          Nicolas Froment (@lasconic)

                                                                          Former CTO and Community Manager

                                                                          Current In-house Team

                                                                          Need to contact the in-house team? If so then you should join MuseScore's Discord Server. Alternatively, you can send a message to our Community Ambassador Peter Jonas (shoogle) via his contact page and he will reply via email.

                                                                          Martin Keary (@Tantacrul)

                                                                          Product Owner and Lead Designer, since March 2019
                                                                          martin.jpg

                                                                          Vasily Pereverzev (@bootincat, @pereverzev_v)

                                                                          Lead Developer, since November 2019

                                                                          Peter Jonas (@peterjonas, @shoogle)

                                                                          Community Ambassador, developer, designer and accessibility specialist, since February 2021
                                                                          Peter.jpg

                                                                          Daniel Ray (@danieljray, @daniel)

                                                                          Product Strategy, since August 2017

                                                                          Igor Korsukov (@igorkorsukov, @igor.korsukov)

                                                                          Software Architect and CI Engineer, since March 2020

                                                                          Simon Smith (@its_not_nice)

                                                                          Engraving Expert, since June 2020

                                                                          Jessica Williamson

                                                                          UI Designer, since June 2020

                                                                          Bradley Kunda (@bkunda, @bradleykunda)

                                                                          UX/UI Designer, since May 2021

                                                                          Roman Pudashkin (@roman_markov, @rpudashkin)

                                                                          UI Developer, since July 2020

                                                                          Elnur Ismailov (@Eism_Ui, @eismailzada)

                                                                          UI Developer, since July 2020

                                                                          Casper Jeukendrup (@cbjeukendrup)

                                                                          Developer, since February 2022

                                                                          Zac Jansheski (@zac)

                                                                          Percussion Specialist & MuseScore Drumline, since September 2019

                                                                          Vyacheslav 'Slava' Shalkevich AKA François Marie Arouet (@EpicStore1, @EpicPointer)

                                                                          Product Tester, since October 2020

                                                                          Code contributors

                                                                          Joachim 'Jojo' Schmitz (@Jojo-Schmitz)

                                                                          jojo.jpg
                                                                          (Above you see the usual punishment for making really stupid coding mistakes 😉)
                                                                          What about MuseScore causes you to get engaged?
                                                                          Joined a choir in November 2009, that choir, founded 1972 as a youth choir (meanwhile the average age is 50), had a pretty large repertoire of songs (mainly modern church music, gospels, Taizé, etc.), quite many as copies of copies of copies... of a bad handwriting or blurred foto, the 'old' members knew them mostly by heart and needed them only to have something to hold on to, or for the odd word in the lyrics, while I needed legible notes and texts. So I started looking for free score writing software on the internet, detected lilypond, found it to complicated, got hold of an illegal copy of a commercial software (Capalla), found it too complicated and also not right, then found MuseScore, 0.9.5 at the time, immediately became addicted and transcribed my first song with it in February 2010. First and foremost just for myself, but soon it became apparent that it would be useful for other choir members too. Meanwhile I've transcribed far more than 750 scores, plus an entire songbook of some 400 scores.
                                                                          I came for the software and stayed for the community,
                                                                          My involvement with MuseScore as a contributor began with answering questions in the forums, translating the software and the handbook and eventually led to code contributions.

                                                                          What do you like most about MuseScore?

                                                                          • Free and OpenSource, IMHO a perfect match to a voluntary and non-professional choir.
                                                                          • Available in German, very important to me at the time, being a musical lay person (except for some recorder lessons on early childhood, all forgotten since long)
                                                                          • Easy to use

                                                                          What is your favorite feature of MuseScore 3?
                                                                          The ability to be able to place lyrics above staff and also to be able to extract voices from a closed score SATB, along with the option to have channels for the voices for rehearsal.

                                                                          What would you like to see happen with MuseScore in the coming year?

                                                                          • Really looking forward to seeing much more frequent releases.
                                                                          • Meeting at FOSDEM!
                                                                          • Hunting down and fixing bugs, making stupid mistakes along the way. 😉

                                                                          Marc Sabatella (@MarcSabatella)

                                                                          avatar - square.JPG
                                                                          What about MuseScore causes you to get engaged?

                                                                          Working on MuseScore integrates several different aspects of who I am and what I do - my interests and skills in music, and education, and software. For all my adult life, I have worked in one or more these areas, but never in a way that involves them all so completely.

                                                                          What do you like most about MuseScore?

                                                                          The open source nature of MuseScore is what got me involved, and I probably wouldn't have switched over to it from what I was using before otherwise. The sense of community that results is also very gratifying. But in day-to-day use of the application, it's the combination of simplicity and power that I appreciate most.

                                                                          What is your favorite feature of MuseScore 3?

                                                                          Automatic placement for sure. I have to admit I was skeptical at first and figured there would be many cases where I disagreed with its decisions and that it would make it more difficult to get the results I wanted. The reality is, it's usually doing something very sensible, and it's easy to override it when I want. I know that this feature will save me much time on everything from initial entry of music to editing parts to creating transposed lead sheets.

                                                                          What would you like to see happen with MuseScore in the coming year?

                                                                          I want to see us make a major outreach to schools. We know students are already choosing MuseScore for their own work, and now their teachers are beginning to see the value in supporting their students in this. I also want to see us do everything we can to improve our accessibility story and finally become a viable choice for blind musicians.

                                                                          Eric Fontaine (@ericfont)

                                                                          2018-12-24 13.35.png
                                                                          What about MuseScore causes you to get engaged?
                                                                          After years of playing in lots of bands around Atlanta, I'd get frustrated with bandleaders not providing good charts (and if they did have charts they'd be unlegible handwritten charts, or might not be transposed to my saxophone key). Their excuses for not making a chart were that they couldn't afford notation software, or that the existing software was too complicated. I personally didn't like wasting time in rehearsal dealing with reading bad charts or trying to remember the songs from memory, so I'd often become the scribe who notated the charts for them. I've been using MuseScore since ~2010 for this, which I chose because I'm a Linux user (and even though version 0.9.6 was limited, it was better than any other notation editor on Linux). I started fixing MuseScore bugs in 2015 to help contribute back to the open-source community, and because I want more people around the world to be able to more easily make music. Every time I hear or play with other musicians who wrote their scores in musescore, I feel happy that I indirectly helped them, even if it was as minor as them not experiencing a trivial glitch.

                                                                          What do you like most about MuseScore?
                                                                          ericfont: It's open-source, cross-platform, multi-lingual, free, and relatively easy to use. That allows anyone around the world with any amount of money to make any score, big or small, on any computer, and easily share their scores online.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          ericfont: The faster rendering engine speed which facilitates writing larger scores. Previously in MuseScore 2, when I'd write a very large score (many-instrument, multiple movements), I'd have to wait a noticable delay after every input was visible on the screen. That was because MuseScore had to re-render the entire score for every minor edit. But with MuseScore 3, the rendering engine is smart to know that it only has to re-render measures affected by each individual edit.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          ericfont: I'd like to be able to use real instruments as input, such as by incorporating a real-time audio-to-midi tool. And to input by playing in free-form (including with both hands on a piano), and have the raw unquantized midi be displayed in realtime on a piano roll alongside MuseScore's real-time notation guess (with barlines synced up), along with ways to help to notation translation interpret the input. Also a way to link MuseScore with external DAW programs (like Ardour) so I can record real audio tracks that are lined up and linked to their notation. Also an integrated assistant for transcribing recorded audio.

                                                                          Isaac Weiss (@IsaacWeiss)

                                                                          2018-12-24 22.22.41.jpg
                                                                          What about MuseScore causes you to get engaged?
                                                                          My engagement level spikes every time there's some vigorous debate about a development decision. 😉 In all seriousness, the ability for users to directly communicate with the core developers, and have their thoughts seriously taken into account, is what first hooked me in back during the 2.0 Beta period. (I wrote a blog post about this a couple of years ago). Every polished release comes out of people's sweat and tears behind the scenes, and I get to be a part of it—how cool is that?

                                                                          What do you like most about MuseScore?
                                                                          Its kindness. It makes music creation possible for everyone, with no strings attached. When Ultimate Guitar took over development, I feared the commercial web platform would be more forcefully integrated into the libre and gratis desktop software, poisoning MuseScore's beauty. Thankfully, though, the new team simply pushed the kindness forward by giving users even more even faster.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          There are two that go hand in hand. First, Automatic Placement (I wish it was still called Smart Layout, but you can't win 'em all)—it's still got plenty of limitations, but it will save me so much time with new projects, and I trust that the layout will continue to get smarter (or, I guess, the placement will continue to get more automatic?). Nearly as important is the Sparkle integration—that means there can be more improvements one after another as never before, because with a built-in updater there can be frequent releases without users having to continually install new versions.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          Smarter layout, as I mentioned—collision avoidance, alignment, default placement of various elements. The new Dorico program is already the gold standard for beautiful scores without adjustments needed; we certainly have what it takes to match that, if we put our minds to it. For myself, I want to finally study the Qt framework so I can undertake some design improvements, while continuing to work on my C++ skills, and hopefully come up with a Google Summer of Code project in a few months.

                                                                          Johan Temmerman (@jeetee)

                                                                          jeetee_ms.png
                                                                          What about MuseScore caused you to get engaged?
                                                                          I briefly crossed paths with MuseScore (0.9.6) during my college days but hadn't used it for more than a piece or two after which I'd reverted to my usual program back then.
                                                                          It wasn't until version 2.0.2 that I picked it up again; then as a tool to generate practice mp3s for the choir I took part in. This brought me, as a developer, to dive into the plugin framework to improve an already existing UltraStar plugin. Shortly after I'd gotten a strong itch to easier work with ritenuto's, leading to my very first own plugin: TempoChanges.
                                                                          During the development of that plugin I got cornered by the limitations and some bugs in the plugin framework. Carefully attempting to address this with the developers on irc (I've had my share of irc-experiences in Open Source before) I was met with much understanding and friendly guidance on how to fix or work around my issues. It is the open and positive attitude in there that made me stick around, answer forum posts and perform the occasional pull request.

                                                                          What do you like most about MuseScore?
                                                                          Hmm… That's a hard question. In a single word: passion
                                                                          Passion from lots of people in the community; be it about music itself, or making this the best possible notation program.
                                                                          A close second word would be openness
                                                                          Not only is the software Open Source and gratis, lowering the bar for many musicians into digitizing their scores. Just as much the welcoming open mind of the community and the developers.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          The questions aren't getting any easier :)
                                                                          I think I'll have to pick "tours" then. It's a seemingly small addition, but I have a feeling it'll be instrumental in easing in new users into the MuseScore workflow.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          * Plugin Framework
                                                                          * Playback only on a given repeat (2nd time only f.e.)
                                                                          * More bugs fixed than introduced :)
                                                                          * FOSDEM meet-up

                                                                          Thorsten Glaser (@mirabilos)

                                                                          Mark McKay (@blackears)

                                                                          What about MuseScore causes you to get engaged?
                                                                          I've been interested in being able to compose music for some time. After using a few DAWs, I came across MuseScore and was impressed by its ability to express notes using standard staff notation, which I find much easier to read. When I discovered it was open source, that gave me the incentive to begin tweaking things to improve my workflow. Luckily the core devs have agreed with most of my changes.

                                                                          What do you like most about MuseScore?
                                                                          I love that it allows you to see your music in standard notation as well as automatically play it back so you can hear the audio. The free price tag and the ability to tinker with the code base are also a huge win.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          I have to admit I'm biased toward the new mixer and piano roll editor (two components which I worked on).

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          Personally, I'd like to see features added that makes it easier to compose within MuseScore and also to improve the audio produced during playback.

                                                                          Matt McClinch (@mattmcclinch)

                                                                          2018-12-24 22.32.56.jpg
                                                                          What about MuseScore causes you to get engaged?
                                                                          I feel like I am an important part of something big and exciting with MuseScore. I consider it a privilege to be able to use my time and talent to help the community and to make MuseScore a better and more stable product.

                                                                          What do you like most about MuseScore?
                                                                          I like that MuseScore is free, and I really do find it easy to use, given an understanding of the way things work.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          I am really excited about Autoupdate and the regularity with which updates will be made available. This has made it possible for MuseScore 3 to be released even while undergoing constant development.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          I would like to see MuseScore do more in terms of offering assistance when it comes to fixing corruption that it may find when loading a score. Now that there are no measure numbers in the saved file, it is much harder to edit it manually.

                                                                          Joshua Bonn (@joshuabonn1)

                                                                          What about MuseScore causes you to get engaged?
                                                                          After completing 2 GSoC programs, I continued to be engaged by them, trying to improve them for the users and developers (e.g. Timeline Refactoring, tour fixes, workspace fixes). If I ever "finish" them, I'd probably move onto another larger feature and see where that takes me.

                                                                          What do you like most about MuseScore?
                                                                          I really like the community. The strong collaborative nature of everyone, as well as the lightheartedness to make jokes keeps me around.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          After transcribing some orchestral music on it, I have a strong appreciation for auto placement. It makes creating scores that look decent easy to do without much extra effort.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          I'd really like to see the backburner GSoC projects happen. Such as, the scratch pad, completion of auto crash reporting (I believe it was never finished?) and others. While I don't want to bloat the software, these features were asked for multiple times. Hopefully these can roll out in time! 😊

                                                                          Howard Chang (@Howard C.)

                                                                          My real name is Jiayi Zheng and I come from China. I joined the MuseScore community after 3.0 was released, so I'm not precisely following the template here :)

                                                                          I like MuseScore because its powerful tools completely satisfy my needs for music creating & sharing, while being free and having a vibrant and supportive community. I'm especially pleased to see MuseScore being continuously developed till this day, and I'm excited of being among the first people to know of and contribute to upcoming updates. One of my favourite features of MuseScore 4 is the redesigned inspector, to which I contributed and tested. I've devoted much of my time to improving the variety and layout of tremolos, and I'm also looking forward to future engraving improvements, from which I think all of us can benefit.

                                                                          MuseScore has been my companion for years and the witness of my personal growth, from the major I'm pursuing to the advancement of my musical abilities. I want to thank the in-house team and the community for producing and promoting this wonderful app.

                                                                          Niek van den Berg (@njvdberg)

                                                                          niek-small.jpg
                                                                          What about MuseScore caused you to get engaged?
                                                                          When I was playing Clarinet in a baroque orchestra, I had to play any part which was leftover. I ended up in playing mainly Violin II and Viola parts.
                                                                          After playing a transposing instrument, and especially the alien clefs that the Viola used, I was looking for a music notation program.
                                                                          As a Linux user for decades, there wasn't much choice, so running an MS-Windows based application using WINE, was doable for a while.

                                                                          In the meantime, I began writing some small transcriptions/arrangements for another ensemble and thus part generation became more important. Running a Windows-based program was causing more and more problems.

                                                                          Then I can across MuseScore. It was already running on Linux, so no more MS-Windows! This was at the beginning of MuseScore. Linked parts weren't available yet, and there were other problems but it worked very well for printing. So at this time I usedRoseGarden for making the score and MuseScore
                                                                          for printing the parts! Then MuseScore became better and better and even linked parts were introduced. That was the moment that I switch over to MuseScore completely and dropped the other programs.

                                                                          At this time I was also taking early retirement and wanted something to keep me busy. My two strongest interests (apart from partner of course) are music and programming, so I decided to see whether I could contribute to MuseScore. With the help of other contributors, I found my way and started looking at some of the open issues.

                                                                          My involvement began with solving some minor issues and moved onto larger features, such as automatic score ordering and the vertical adjustment of staves, both introduced in MuseScore 3.6.

                                                                          What do you like most about MuseScore?
                                                                          * That it’s OpenSource and runs on all major platforms.
                                                                          * That it works well for making scores for orchestras and small ensembles.
                                                                          * Its linked parts are important for my daily use and work well.
                                                                          * It’s a nice, open and friendly community which is always willing to help!

                                                                          What is your favorite feature of MuseScore 3?
                                                                          In fact there are 2 features which are very important for my daily use. These are the automatic placement of elements and the new vertical adjustment of staves. These 2 features result in excellent parts which
                                                                          require remarkably little fine tuning to make them ready of publish. This is a real time saver for me.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          As a matter of fact, I'm quite happy with MuseScore as it is. But there are always bugs to solve. I feel the Voice-to-Part feature could be improved. This makes it is easy to create separate parts from a condensed score. It does work, but is still quite rough around the edges and it still results in some bleeding hands.

                                                                          Testers

                                                                          Jean Bernard ROY (@cadiz1)

                                                                          1279273154.jpg
                                                                          What about MuseScore causes you to get engaged?
                                                                          My job, first. I am a guitar teacher in France, and after failed attempts with the Finale program, I discovered the version 1.3, five and a half years ago. Quickly, I managed to enter some teaching scores. I then knew that I had found "my" notation program, the one where I feel like a fish in the water!

                                                                          What do I like most about MuseScore?
                                                                          It is a program that probably corresponds to what I consider my own intuivity. I have never really been blocked by this or that thing. I like its flexibility, its ability to customize its use through the custom workspaces. And when you know the program well, we realize that it has almost no limit.
                                                                          And finally I discovered an amazing community passionate about music and the program.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          I am interested by everything about the repertoire of the guitar , mainly . And so it goes from the Renaissance period (lute and renaissance guitar), through the Baroque period, until classical and contemporary periods. Every day, I use tablature functions for early music, to make guitar transcriptions.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          First wish him the best for the year and the years to come ! Personally, I would like to see implement functions that I use a lot, also daily, but which are for the moment in the state of plugins (I think Double Time / Half Time), or by workarounds extremely time consuming, mainly fingering (a Fingering mode is highly necessary in my opinion), and tablatures/scores for diatonic instruments.

                                                                          Mike Nelson (@mike320)

                                                                          What about MuseScore causes you to get engaged?
                                                                          Everyone in the forums are great! I do answer my fair share of questions, but I became attached to MuseScore when I saw how kind and helpful other were. I have a love for classical music and a desire to put a few notes to paper I can hear myself. When I discovered version 2.0.3 I realized MuseScore was the answer to this.

                                                                          What do you like most about MuseScore?
                                                                          The best thing is that it's free and you get much more than what you pay for. It is a quality program despite my occasional rants. Every user also has potential to have input into the final product. If you program you can write code, if you don't then those who do write code listen and attempt to improve the program and satisfy requests from users.

                                                                          What is your favorite feature of MuseScore 3?
                                                                          The best feature is the auto avoidance introduced today (Christmas eve 2018) in version 3.0. This makes creating a score many times easier than it was in version 2, and I was quite happy with that version.

                                                                          What would you like to see happen with MuseScore in the coming year?
                                                                          I want to see version 3 be capable of annotating standard western music as well as a few of the items that have been discussed at length in the forums. The ideas behind version 3 features are great and I want them to be fully available and functioning properly.

                                                                          Release notes

                                                                          Release notes for MuseScore 4.x

                                                                          No real release notes, just announcements

                                                                          • 4.1.1, July 26, 2023 (see changelog)
                                                                          • 4.1.0, July 12, 2023 (see changelog)
                                                                          • 4.0.2, March 13, 2023 (see changelog)
                                                                          • 4.0.1, January 13, 2023 (see changelog)
                                                                          • 4.0.0, December 14, 2022

                                                                          Release notes for MuseScore 3.x

                                                                          Release notes for MuseScore 3.6.x

                                                                          Release notes for MuseScore 3.6.2 (February 8, 2021)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.6.2.548020600, Windows 7+ (x86/64/Portable): 3.6.2.548021803, AppImage: 3.6.2.548021370 (revision: 3224f34) 2021-02-08 https://musescore.org/en/3.6.2

                                                                          Fixes

                                                                          • Fixed an issue with gap between staff and end barline with courtesy clef
                                                                          • #316502: Fixed an issue with accessibility of "score migration" dialog
                                                                          • #275837: Fixed a crash related to QtWebEngineProcess after update
                                                                          • #316373: Fixed an issue with appearance of part name in timeline rather than instrument name
                                                                          • #316125: Fixed an issue with handling of "dockable" windows focus on visibility toggle
                                                                          • #316096: Fixed an issue when custom gliss text reverts to default "gliss"
                                                                          • #315963: Added missing Flügelhorns to concert bands, orchestral and big bands, jazz combos and brass ensembles
                                                                          • #315677: Fixed an issue with unavailable beaming across crotchet rests
                                                                          • #316610: Fixed an issue when staff spacer does not work on last system of page
                                                                          • #316645: Fixed an issue with broken swapping notes/chords with Shift + Left/Right
                                                                          • #315904: Fixed an issue with incomplete import from ScoreScan XML file
                                                                          • Fixed an issue with unsaved default settings to pre 3.6 score after 'reset to defaults'
                                                                          • #316896: Fixed an issue with Banjo fifth string fret numbers
                                                                          • #316555: Fixed an issue when invisible breath impacted a layout
                                                                          • #316679: Fixed a crash during the opening a score with a missing section break
                                                                          • #305777: Applying tremolo is a toggle operation now
                                                                          • #315408: Fixed an issue when "Mixer" panel not fully shown when opened
                                                                          • #316754: Fixed an issue with empty rehearsal mark not deleted after entering a line break
                                                                          • #316869: Fixed an issue when multi-measure rest numbers can collide with other elements
                                                                          • #316797: Fixed an issue when deleting a breath/caesura leads to selection of the wrong note
                                                                          • #316559: Fixed an issue when part inherits non-default style from score
                                                                          • #316441: Fixed a crash when changing time signature in front of a corrupted measure
                                                                          • #316571: Updated a close icon for Import Midi Panel (and Find/GoTo)
                                                                          • #315779: Fixed an issue with auto-size of vertical frame when dragging the height handle

                                                                          Release notes for MuseScore 3.6.1 (January 27, 2021)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.6.1.515739048, Windows 7+ (x86/64/Portable): 3.6.1.515740707, AppImage: 3.6.1.515740129 (revision: d0fc8e9) 2021-01-27 https://musescore.org/en/3.6.1

                                                                          Fixes

                                                                          • #315529: Crash when opening file with start repeat in Continuous View
                                                                          • #315237: Fixed an issue with tab switch when opening a score when "Score migration dialog" is opened
                                                                          • #315599: Crash when rearranging instrument positions and changing Ordering
                                                                          • Window marked as modified, even when the last score is closed
                                                                          • #315627: Crash during the opening of large orchestration created in older versions of MuseScore
                                                                          • #315553: Incorrect order of Violins in Orchestra template
                                                                          • #309333: Crash during the hiding of palettes
                                                                          • #316224: Export fail when part name contains slash
                                                                          • #316025: Spacers do not function with vertical justification enabled
                                                                          • #316071: Added an option to Copy SMuFL Symbol Code for symbols in Master Palette
                                                                          • #315861: Clef changes no longer visible on hidden staves
                                                                          • #315841: "first system indent" can cause measures to not fit on system
                                                                          • #315638: Wrong key signature on "reset styles" with concert pitch
                                                                          • #316071: Display sym smufl name in symbols palette
                                                                          • #315671: Corner radius from "default rehearsal mark style" is removed
                                                                          • #315503: Custom style defaults ignored when creating new score from template
                                                                          • #315726: Applying key change to a selection causes crash if transposing instrument is involved
                                                                          • #284796: Incomplete voice in local time signature leads to corruption upon import
                                                                          • #315067: Swapping notes in a two-note tremolo causes corrupt tremolo (and crash)
                                                                          • #315147: Two-note tremolos display incorrectly when the stave has custom scale
                                                                          • #315781: Measure number offset changes on reload
                                                                          • #290356: Now possible to copy-paste the LetRing, PalmMute and Vibrato elements
                                                                          • The link at "Score migration dialog" now leads to Bilibili if using Chinese

                                                                          Release notes for MuseScore 3.6 (January 14, 2021)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.6.0.487915347, Windows 7+ (x86/64/Portable): 3.6.0.487915773, AppImage: 3.6.0.487916429 (revision: 1977cb3) 2021-01-15 https://musescore.org/en/3.6

                                                                          New

                                                                          • Added the new default notation fonts "Leland"
                                                                          • Added the new default text font "Edwin"
                                                                          • Added a new dialog that suggests trying out the new engraving defaults
                                                                          • Added automatic score ordering and bracketing
                                                                          • Added automatic vertical justification of staves
                                                                          • Added Mountain Dulcimer instrument and 3-string tab presets
                                                                          • Added portamento for FLUID synthesiser
                                                                          • Added Petaluma notation font
                                                                          • Added mnemonics for "Save", "Save As" and "Resource Manager"

                                                                          Improvements

                                                                          • Redesigned the score migration dialog and the algorithm for applying new styles
                                                                          • Improved the vertical staff justification algorithm
                                                                          • First system indentation now takes the maximum of the length of the instruments labels and the style parameter
                                                                          • Added a support of measure number interval at multi-measure rests
                                                                          • Improved the recognition of instruments when loading a pre-3.6 score
                                                                          • Altered default canvas background colour
                                                                          • Improved functionality and appearance of 'Add Palettes' button
                                                                          • Implemented a new "Export" dialog
                                                                          • Improved the score symbols appearance
                                                                          • Updated Bravura notation font to version 1.39
                                                                          • Extended the set of accidentals
                                                                          • Implemented a third stroke style for minim-based two-note tremolos
                                                                          • Added extended fermata symbols to MusicXML I/O
                                                                          • Updated SMuFL to the latest version 1.3
                                                                          • Added support for triple sharp and triple flat
                                                                          • Replaced the accidentals from Emmentaler with improved ones from Parnassus
                                                                          • Added an indication of sounding pitch if the global concert pitch toggle is off and the current instrument has an actual pitch
                                                                          • Added heavy, reverse end and heavy double barlines
                                                                          • Added Sicilian translation
                                                                          • The Edit Style dialog is no longer modal: the score can now be traversed while the dialog is open
                                                                          • Added an alternative choice of “To Coda”
                                                                          • Added a harmony duration interpretation
                                                                          • MacOS window title bars now update according to the selected theme in MuseScore
                                                                          • Added an automatic change of theme in MuseScore according to the MacOS dark/light mode setting
                                                                          • The width of accidental symbols in the font is now honoured during drawing
                                                                          • Solo instrument names now end in "solo"
                                                                          • Improved collision avoidance between accidentals and ledger lines
                                                                          • Improved the appearance of shadow notes
                                                                          • Improved layout of the "Edit Style" dialog
                                                                          • Cleaned up all unnecessary spaces and words used in file export
                                                                          • Order of buttons in "Score migration" dialog is now platform-specific
                                                                          • Improved search behavior in "Palettes"
                                                                          • Added an option for applying new text font (Edwin) to imported MusicXML scores
                                                                          • Replenished collection of demo scores

                                                                          Fixes

                                                                          • Fixed a bug preventing generation of square braces for an instrument with multiple staves
                                                                          • Fixed an issue where style dialog loses setting of chord symbol radio buttons
                                                                          • Fixed an issue with measure numbers not showing when first staff is cut away
                                                                          • Fixed an issue where ledger lines only showed correctly when staff line spacing set to 0.5 increments (i.e 1.5, 2.0, etc.)
                                                                          • Fixed an issue with image resize not correctly honouring aspect ratio
                                                                          • Fixed an issue with "Select Similar Beat" command not working with shortened measures
                                                                          • Fixed an issue where glissandos collide with double-digit start fretmarks
                                                                          • Fixed glissando and portamento playback
                                                                          • Enabled selection of text using the mouse in Palettes search field
                                                                          • Adjusted the "Range-transpose" shortcuts
                                                                          • Adjusted the appearance of dotted lines
                                                                          • Staff visibility changes are now allowed mid-score
                                                                          • Fixed an issue with the appearance of additive time signatures
                                                                          • Fixed an issue where Mandolin unintentionally has a Grand Piano sound
                                                                          • Expanded the list of special characters in "Special characters -> Common Symbols"
                                                                          • Jump at Volta End no longer skips last measure
                                                                          • Fixed a crash when switching instruments from an instrument with tabulature
                                                                          • Fixed an issue when toggling between clefs of unpitched and pitched instruments, which led to a crash
                                                                          • Fixed an issue where pressing Enter in the Score Properties dialog applies to the "New…" button rather than the "OK" button
                                                                          • Fixed a crash when deleting header/footer text after hiding
                                                                          • Fixed an issue where removing tuplets after inserting measures caused corruption/crash
                                                                          • Reduced useless whitespace in JSON files
                                                                          • Disabled auto collision avoidance for rests which do not have auto-placement enabled
                                                                          • Fixed an issue where rests cannot be merged together when the measure has 3 or 4 voices
                                                                          • Fixed an issue with the "Flatten all Beams" setting being ignored on score reload
                                                                          • Fixed an issue where voice-1 rests collide with voice-3 rhythm slashes
                                                                          • Fixed an issue where C time signature does not update
                                                                          • Fixed an issue with readability of the tempo field by screen readers
                                                                          • Fixed a palette search shortcut functionality issue
                                                                          • Fixed an issue with missing space between the key signature and the first note when the time signature is hidden
                                                                          • Fixed a freeze when a tie has the same start and end note
                                                                          • Fixed a crash when deleting or changing a time signature in a multi-measure rest
                                                                          • Fixed an issue with import of MusicXML files from the new version of Finale
                                                                          • Fixed an incorrect tuplet calculation on a two-note tremolo
                                                                          • Removed support for the "place at middle of stem" option for single-note tremolos
                                                                          • Fixed an issue where duplication of voltas leads to following voltas being ignored
                                                                          • Fixed an issue with MusicXML import of changed transpositions
                                                                          • Fixed an issue where hairpin export stops halfway
                                                                          • Fixed an issue with FirstSystemIndentation style setting not taking account of instrument label length
                                                                          • Fixed an issue where MusicXML import did not honour "measure-style/slash"
                                                                          • Fix missing kerning in MuseJazz Text
                                                                          • Fixed an issue with application of new styles to 'recent' scores
                                                                          • Fixed an issue with application of new styles to pre-3.6 scores
                                                                          • Fixed an issue with incorrect brace scaling
                                                                          • Fixed an issue with import of MusicXML tempo changes
                                                                          • Fixed an issue where aligned pedal lines jump wildly while being dragged
                                                                          • Fixed an issue with updating of translations
                                                                          • Fixed an issue with export of fretboard diagrams to MusicXML
                                                                          • Fixed an issue where atonal key signatures caused spacing issues
                                                                          • Fixed an issue with the "Show MIDI controls in mixer" checkbox in "Preferences" dialog
                                                                          • Fixed an issue with inconsistent stem directions on middle-line beamed notes
                                                                          • Fixed an issue with application of new styles to 'recent' scores
                                                                          • Fixed an issue with measure numbers colliding with brackets
                                                                          • Fixed an issue with triggering of translation process after a language switch
                                                                          • Fixed an issue where fingering was wrongly scaled with note size
                                                                          • Fixed an issue with cutaway courtesy clefs not showing
                                                                          • Fixed an issue with export of 32nd-note tuplets into MusicXML format
                                                                          • Removed unnecessary rounding of BPM value in "Play panel"
                                                                          • Fixed an issue with unexpected behavior of "Esc" key in "Edit Style" dialog
                                                                          • Fixed a crash when importing a file with an incomplete tuplet
                                                                          • Fixed an issue where adding instruments on top of others whose parts have been created leads to score corruption
                                                                          • Fixed an issue with styles in the "converter" mode
                                                                          • Fixed an issue where changing any property on a text line resets all styled properties to default
                                                                          • Fixed an issue where the "Custom" string in "Instrument > Order" shows untranslated

                                                                          Release notes for MuseScore 3.6 Release Candidate (December 29, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.6.0.451381598, Windows 7+ (x86/64/Portable): 3.6.0.451380634, AppImage: 3.6.0.451381076 (revision: 10dee08) 2020-12-29 https://musescore.org/en/3.6rc

                                                                          Improvements

                                                                          • Improved layout of the "Edit Style" dialog
                                                                          • Cleaned up all unnecessary spaces and words used in file export
                                                                          • Order of buttons in "Score migration" dialog is now platform-specific
                                                                          • Improved search behavior in "Palettes"
                                                                          • Added an option for applying new text font (Edwin) to imported MusicXML scores
                                                                          • Replenished collection of demo scores

                                                                          Fixes

                                                                          • Fixed an issue with application of new styles to 'recent' scores
                                                                          • Fixed an issue with application of new styles to pre-3.6 scores
                                                                          • Fixed an issue with incorrect brace scaling
                                                                          • Fixed an issue with import of MusicXML tempo changes
                                                                          • Fixed an issue where aligned pedal lines jump wildly while being dragged
                                                                          • Fixed an issue with updating of translations
                                                                          • Fixed an issue with export of fretboard diagrams to MusicXML
                                                                          • Fixed an issue where atonal key signatures caused spacing issues
                                                                          • Fixed an issue with the "Show MIDI controls in mixer" checkbox in "Preferences" dialog
                                                                          • Fixed an issue with inconsistent stem directions on middle-line beamed notes

                                                                          Release notes for MuseScore 3.6 Beta (December 15, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.6.0.423677068, Windows 7+ (x86/64/Portable): 3.6.0.423676596, AppImage: 3.6.0.423675897 (revision: 2cbee43) 2020-12-15 https://musescore.org/en/3.6beta

                                                                          New

                                                                          • Added the new default notation fonts "Leland"
                                                                          • Added the new default text font "Edwin"
                                                                          • Added a new dialog that suggests trying out the new engraving defaults
                                                                          • Added automatic score ordering and bracketing
                                                                          • Added automatic vertical justification of staves
                                                                          • Added Mountain Dulcimer instrument and 3-string tab presets
                                                                          • Added portamento for FLUID synthesiser
                                                                          • Added Petaluma notation font
                                                                          • Added mnemonics for "Save", "Save As", "Export", "Print", "Parts" and "Resource Manager"

                                                                          Improvements

                                                                          • Redesigned the score migration dialog and the algorithm for applying new styles
                                                                          • Improved the vertical staff justification algorithm
                                                                          • First system indentation now takes the maximum of the length of the instruments labels and the style parameter
                                                                          • Added a support of measure number interval at multi-measure rests
                                                                          • Improved the recognition of instruments when loading a pre-3.6 score
                                                                          • Altered default canvas background colour
                                                                          • Improved functionality and appearance of 'Add Palettes' button
                                                                          • Implemented a new "Export" dialog
                                                                          • Improved the score symbols appearance
                                                                          • Updated Bravura notation font to version 1.39
                                                                          • Extended the set of accidentals
                                                                          • Implemented a third stroke style for minim-based two-note tremolos
                                                                          • Added extended fermata symbols to MusicXML I/O
                                                                          • Updated SMuFL to the latest version 1.3
                                                                          • Added support for triple sharp and triple flat
                                                                          • Replaced the accidentals from Emmentaler with improved ones from Parnassus
                                                                          • Added an indication of sounding pitch if the global concert pitch toggle is off and the current instrument has an actual pitch
                                                                          • Added heavy, reverse end and heavy double barlines
                                                                          • Added Sicilian translation
                                                                          • The Edit Style dialog is no longer modal: the score can now be traversed while the dialog is open
                                                                          • Added an alternative choice of “To Coda”
                                                                          • Added "Cut time (Bach)" and "Cut triple time (9/8)" time signatures
                                                                          • Added a harmony duration interpretation
                                                                          • MacOS window title bars now update according to the selected theme in MuseScore
                                                                          • Added an automatic change of theme in MuseScore according to the MacOS dark/light mode setting
                                                                          • The width of accidental symbols in the font is now honoured during drawing
                                                                          • Solo instrument names now end in "solo"
                                                                          • Improved collision avoidance between accidentals and ledger lines
                                                                          • Improved the appearance of shadow notes

                                                                          Fixes

                                                                          • Fixed a bug preventing generation of square braces for an instrument with multiple staves
                                                                          • Fixed an issue where style dialog loses setting of chord symbol radio buttons
                                                                          • Fixed an issue with measure numbers not showing when first staff is cut away
                                                                          • Fixed an issue where ledger lines only showed correctly when staff line spacing set to 0.5 increments (i.e 1.5, 2.0, etc.)
                                                                          • Fixed an issue with image resize not correctly honouring aspect ratio
                                                                          • Fixed an issue with "Select Similar Beat" command not working with shortened measures
                                                                          • Fixed an issue where glissandos collide with double-digit start fretmarks
                                                                          • Fixed glissando and portamento playback
                                                                          • Enabled selection of text using the mouse in Palettes search field
                                                                          • Adjusted the "Range-transpose" shortcuts
                                                                          • Adjusted the appearance of dotted lines
                                                                          • Staff visibility changes are now allowed mid-score
                                                                          • Fixed an issue with the appearance of additive time signatures
                                                                          • Fixed an issue where Mandolin unintentionally has a Grand Piano sound
                                                                          • Expanded the list of special characters in "Special characters -> Common Symbols"
                                                                          • Jump at Volta End no longer skips last measure
                                                                          • Fixed a crash when switching instruments from an instrument with tabulature
                                                                          • Fixed an issue when toggling between clefs of unpitched and pitched instruments, which led to a crash
                                                                          • Fixed an issue where pressing Enter in the Score Properties dialog applies to the "New…" button rather than the "OK" button
                                                                          • Fixed a crash when deleting header/footer text after hiding
                                                                          • Fixed an issue where removing tuplets after inserting measures caused corruption/crash
                                                                          • Reduced useless whitespace in JSON files
                                                                          • Disabled auto collision avoidance for rests which do not have auto-placement enabled
                                                                          • Fixed an issue where rests cannot be merged together when the measure has 3 or 4 voices
                                                                          • Fixed an issue with the "Flatten all Beams" setting being ignored on score reload
                                                                          • Fixed an issue where voice-1 rests collide with voice-3 rhythm slashes
                                                                          • Fixed an issue where C time signature does not update
                                                                          • Fixed an issue with readability of the tempo field by screen readers
                                                                          • Fixed a palette search shortcut functionality issue
                                                                          • Fixed an issue with missing space between the key signature and the first note when the time signature is hidden
                                                                          • Fixed a freeze when a tie has the same start and end note
                                                                          • Fixed a crash when deleting or changing a time signature in a multi-measure rest
                                                                          • Fixed an issue with import of MusicXML files from the new version of Finale
                                                                          • Fixed an incorrect tuplet calculation on a two-note tremolo
                                                                          • Removed support for the "place at middle of stem" option for single-note tremolos
                                                                          • Fixed an issue where duplication of voltas leads to following voltas being ignored
                                                                          • Fixed an issue with MusicXML import of changed transpositions
                                                                          • Fixed an issue where hairpin export stops halfway
                                                                          • Fixed an issue with FirstSystemIndentation style setting not taking account of instrument label length
                                                                          • Fixed an issue where MusicXML import did not honour "measure-style/slash"
                                                                          • Fix missing kerning in MuseJazz Text

                                                                          Release notes for MuseScore 3.5.x

                                                                          Release notes for MuseScore 3.5.2 (October 16, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.5.2.312126096, Windows 7+ (x86/64/Portable): 3.5.2.311459983, AppImage: 3.5.2.312125617 (revision: 465e7b6) 2020-10-16 https://musescore.org/en/3.5.2

                                                                          Fixes

                                                                          • Fixed an unexpected page stretching in "Edit style" dialog.
                                                                          • #311520: Fixed an issue of harmony playback preferences. Previously, the real value of "Chord symbol playback" was not taken into account until the first toggle of this setting.
                                                                          • #311621: Fixed an issue with audio export on Windows, previously exporting to .FLAC or .OGG could result in an empty file that cannot be played and into. WAV not exporting at all.
                                                                          • #311661: Fixed a potential crash that could occur when resizing the Piano Roll.
                                                                          • #311695: Edits to system text/tempo marking after save and reload of score did not propagate to all parts.

                                                                          Release notes for MuseScore 3.5.1 (October 9, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.5.1.297078174, Windows 7+ (x86/64/Portable): 3.5.1.297079288, AppImage: 3.5.1.297078767 (revision: 186bf15) 2020-10-09 https://musescore.org/en/3.5.1

                                                                          Fixes

                                                                          • Fixed a crash during voice changing of chord with tied grace note
                                                                          • Fixed crashes when using hbox within vbox
                                                                          • Fixed a crash when deleting all measures
                                                                          • Fixed a crash when changing Common time to Cut time in parts
                                                                          • Fixed a crash on playback of score with MM rest at the end
                                                                          • Fixed a crash when drag-and-dropping a breath & pause or rest symbol from the score to a custom palette
                                                                          • Fixed a crash on flipping beam across system break
                                                                          • Fixed crashes when pasting fret diagram without chord symbol in score with parts
                                                                          • Fixed a crash when doing file operations after changing translations in preferences
                                                                          • Fixed an issue of corruption caused by editing certain tuplets
                                                                          • Fixed a crash caused by Start Center if there is no Internet connection
                                                                          • Fixed a crash on DPI change in preferences
                                                                          • Fixed a crash when inserting a new measure within a melisma
                                                                          • Fixed multiple issues with Jumps and repeats

                                                                          Complete list of issues resolved and improvements implemented

                                                                          • #310349: Fixed a crash during voice changing of chord with tied grace note
                                                                          • #311084: Fixed an issue with curly bracket scaling when using MuseJazz
                                                                          • #308589: Fixed an issue with scaling of tuplet number
                                                                          • #310906: Fixed an issue of Staff/Part dialog not becoming dirty after changes if activated via double click
                                                                          • #309857: Fixed an issue of divider not being removed after undo of deleting a vertical frame
                                                                          • #310570: Fixed an issue of triple and quadruple dots not being exported correctly
                                                                          • #310603: Fixed an issue of tremolo customizations lost on second save/reload
                                                                          • Fixed various issues with the handling of title frame on MusicXML import
                                                                          • #301395: Fixed an issue of decrescendo not working on tied notes with subchannels
                                                                          • #308469: Fixed an issue of changing portaudio preferences not working
                                                                          • Fixed an issue with loudness of accents
                                                                          • #302714: Chord symbol playback settings are now available in Edit Style dialog
                                                                          • #257581: Fixed an issue of changes to Measure properties not being propagated between score and parts (fix got reverted for 3.5.2, will get looked at again for 3.6)
                                                                          • #306950: Fixed an issue of Ctrl+Delete command not allowed in note input mode
                                                                          • Added preferences to disable chord symbol playback when opening old scores, or creating new ones needed a further fix, which is in 3.5.2)
                                                                          • #185056: Fixed an issue with entering notes above/below staff
                                                                          • #307720: Fixed an assertion failure when adding image to vertical frame
                                                                          • #153686: Fixed issues with voice and chords with drum input
                                                                          • #307841: Fixed crashes when using hbox within vbox
                                                                          • #307991: Fixed a crash when deleting all measures
                                                                          • #308077: Added the guitar "Solo" templates with default guitar sound
                                                                          • #298779: Fix invisible elements not getting displayed after turning "Show invisible" on
                                                                          • #308562: Fixed an issue of 1-line staves showing unexpected vertical offset
                                                                          • #308568: Fixed an issue of bad selection and corruption on delete
                                                                          • #308947: Fixed a crash when changing Common time to Cut time in parts
                                                                          • #308951: Fixed a crash on playback of score with MM rest at the end
                                                                          • #309005: Updated extra navigation shortcuts to handle MMRests appropriately
                                                                          • #308661: Updated offsets of Gonville's top & bottom bracket glyphs
                                                                          • #309032: "Add clef" shortcuts are now allowed to also work in normal mode
                                                                          • #309066: Fixed an issue of clicking footer text corrupting parts
                                                                          • #308698: Fixed an issue of continuous view stopping repeats from working in playback
                                                                          • #308860: Fixed a crash when drag-and-dropping a breath & pause or rest symbol from the score to a custom palette
                                                                          • #309273: Fixed a crash on flipping beam across system break
                                                                          • #309369: Fixed an issue of status bar not showing concert pitch of octave transposing instruments
                                                                          • #284357: Fixed an issue of ambitus not being correctly calculated for (octave) transposing instruments
                                                                          • #309380: Fixed crashes when pasting fret diagram without chord symbol in score with parts
                                                                          • #309419: Fixed an issue of instrument change data not being properly saved in linked staves
                                                                          • #309592: Fixed an issue of flipping “above” breaths/pauses to “below” when pasting a measure with them
                                                                          • #309594: Now possible to flip breaths/pauses using X
                                                                          • #309665: Fixed an issue of alpha (transparency) not showing on several symbols and Elements
                                                                          • #309754: Create Time Signature dialog now doesn't add unnecessary special text whenever the internal value of nominator or denominator is changed
                                                                          • #308821: Added fractional Time Signatures Support
                                                                          • #308139: Fixed an issue of unintended loss of denominator in Time Signatures
                                                                          • #308694: Fixed an issue of exporting to WAV, OGG, FLAC files with path name that contains non-ASCII characters (caused a regression, fixed in 3.5.2)
                                                                          • #309025: Fixed crashes after updating due to qmlcache
                                                                          • #304834: Adjusted the size of a settings field for multimeasure rests
                                                                          • #309456: Fixed an issue of workspace being changed to Basic when changing language settings
                                                                          • #309872: Fixed a crash when doing file operations after changing translations in preferences
                                                                          • #309874: Fixed an issue of corruption caused by editing certain tuplets
                                                                          • #278817: Fixed a crash caused by Start Center if there is no Internet connection
                                                                          • #310869: Fixed a crash on DPI change in preferences
                                                                          • #311289: Fixed a crash when inserting a new measure within a melisma
                                                                          • #310969: Fixed an issue of a pair of acciaccaturas showing two slashes instead of one
                                                                          • #274690: Fixed crash on playback when score starts with a volta
                                                                          • #279040 and #300362: Fixed bugs with "play repeats" in combination with a D.S.
                                                                          • #287447: Fixed mismatch between segno and end location for multiple jumps
                                                                          • #299320: Fixed D.S. when segno is preceded by a repeat
                                                                          • #299137 and #304795: Fixed interpretation of start repeat and volta in the same measure
                                                                          • #284887: Fixed crash on end of score playback some scenarios

                                                                          Release notes for MuseScore 3.5 (August 6, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.5.0.28537, Windows 7+ (32 and 64-bit): 3.5.0.13199, Linux AppImage: 3.5.0 (revision: 43c5553) 2020-08-06 https://musescore.org/en/3.5

                                                                          New features

                                                                          • Option available in Preferences for playback of chord symbols
                                                                          • Mid-staff instrument changes now do almost everything automatically (see below)
                                                                          • Support for Orca (Linux) screenreader
                                                                          • Hairpins, voltas, and other lines now adapt anchor points when dragged
                                                                          • Much more functional piano roll editor (see below)
                                                                          • Splash screen displays progress messages while loading MuseScore
                                                                          • Diatonic pitch up/down (keep degree alterations) shortcuts
                                                                          • Select Similar Elements: Same Beat
                                                                          • #293113: New Score Wizard automatically numbers instruments
                                                                          • #18897 partial fix: Property for beam style of tremolo (all strokes attached to stem)
                                                                          • #296075: Style for hiding brackets which span to a single staff when empty staves are hidden
                                                                          • #203026: Properties and styles for measure number positioning, including centered and below staff
                                                                          • #65241: Property and style for position of multimeasure rest numbers
                                                                          • #299644: Property for fretboard diagram rotation

                                                                          Improvements

                                                                          • #16077: Double-click a header, footer, or instrument name to access the dialog for editing it
                                                                          • #27371: Score tabs can now be closed using mouse middle button
                                                                          • Improved layout of two-note and single-note tremolos, with and without stem
                                                                          • #93376: Smooth scrolling during playback in Continuous view
                                                                          • Various improvements to simplify searching and loading backup files
                                                                          • #303617: Metric modulation for dotted eighth to quarter
                                                                          • Automatic collision avoidance between rests and notes/rests in other voices
                                                                          • Staff property to automatically merge rests between voices
                                                                          • Allow selection of multiple similar items with shift+click
                                                                          • Allow "repeating a note" by clicking a notehead then pressing "R" in normal mode
                                                                          • Changes made in Preferences are applied significantly faster
                                                                          • Style options to align chord symbols within systems
                                                                          • More zoom controls
                                                                          • Additional plugin capabilities
                                                                          • Altered keyboard and mouse zoom precision and consistency
                                                                          • Improved performance of applying preferences
                                                                          • Chords playback is on by default (untick the "play" property to disable it)
                                                                          • Adding notes to a tuplet now adds them with respect to the tuplet's space
                                                                          • MuseScore 3 is now available as a Windows PortableApp
                                                                          • Altered Shift+L/R for leading space while in edit mode upon notehead
                                                                          • All symbols are now available for the plugins

                                                                          Fixes

                                                                          • JACK audio/MIDI worked incorrectly on some platforms
                                                                          • #148311: Loop playback skipped final rests in the last measure
                                                                          • MIDI note-off events were not sent in some cases
                                                                          • Undoing slur addition to a range only removed one slur
                                                                          • Canceling a selection worked incorrectly in some cases
                                                                          • macOS package was not notarized in Apple
                                                                          • Various fixes for the text editing process
                                                                          • Fixed an issue when hiding notes or rests in a voice > 1 causes stems/beams to flip in a bad and unexpected way
                                                                          • Fixed an issue when two grace notes disabling vertical chord alignment (Maximum Shift Above)
                                                                          • Fixed an issue when "maximum shift above" leading to layout weirdness if measure has rhythm slashes and rests
                                                                          • Fixed an issue with inactive "Realize chord symbols" command
                                                                          • Fixed an issue when key signature appears in multiple places on the single staff
                                                                          • Fixed an issue with missing grid of measures in the "timeline" view
                                                                          • Fixed an issue with appearing of empty dialog during the "Save Online"
                                                                          • Fixed an crash during the drag & drop of volta in continuous view
                                                                          • Brackets were displaced in Continuous View
                                                                          • Nested tuplets in linked staves led to corruption
                                                                          • Octave selection was inconsistent in note input mode
                                                                          • Voices worked incorrectly in the parts dialog in some cases
                                                                          • Misclicking when attempting to create a range selection caused the current selection to be lost
                                                                          • On-screen rendering of synthetically emboldened fonts was broken in some cases
                                                                          • Smooth scrolling worked wrong in Continuous view when dealing with repeats
                                                                          • Saving Online a yet unsaved or uncompressed (mscx) file didn't work
                                                                          • Fixed zoom-box 100% selection bug.
                                                                          • Fixed a bug with ignoring of blank lines at top of text elements
                                                                          • Fixed an issue when cut/paste, drag/drop in Piano Roll Editor does not preserve NoteEvent values
                                                                          • Fixed a playback of chord symbols attached to fret diagrams
                                                                          • Fixed a note entry suggested position with no selection and last selected note in voice > 1
                                                                          • Fixed a display of the bold and underlined texts
                                                                          • Fixed the "Save Online" on AppImages

                                                                          Complete list of issues resolved and improvements implemented

                                                                          • MuseScore 3.5 Alpha release notes
                                                                          • MuseScore 3.5 Beta release notes
                                                                          • MuseScore 3.5 Release Candidate release notes
                                                                          • #307433: Fixed crash when adding voltas in continuous view and improved behaviour when there are repeats
                                                                          • #308023: Nothing happens when select Realize chord symbols via tools->Realize chord symbols
                                                                          • #308281: Fixed blank upload dialog on Mac
                                                                          • #307883: Key Signature appears too many times in Parts
                                                                          • #308145: Fixed a missing grid in timeline view
                                                                          • #308371: Fixed the bad stem directions on tab staves
                                                                          • #307945: Two Grace Notes Disable Vertical Chord Alignment (Maximum Shift Above)
                                                                          • #307946: Chord Symbols > Maximum Shift Above is weird if measure has rhythm slashes and rests

                                                                          Release notes for MuseScore 3.5 Release Candidate (July 16, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.5.0.28145, Windows 7+ (32 and 64-bit): 3.5.0.12799, Linux AppImage: 3.5.0 (revision: fb3c202c) 2020-07-16 https://musescore.org/en/3.5rc

                                                                          Improvements

                                                                          • Altered keyboard and mouse zoom precision and consistency
                                                                          • Improved performance of applying preferences
                                                                          • Chords playback is on by default (untick the "play" property to disable it)
                                                                          • Adding notes to a tuplet now adds them with respect to the tuplet's space
                                                                          • MuseScore 3 is now available as a Windows PortableApp
                                                                          • Altered Shift+L/R for leading space while in edit mode upon notehead
                                                                          • All symbols are now available for the plugins

                                                                          Fixes

                                                                          • Fixed zoom-box 100% selection bug.
                                                                          • Fixed a bug with ignoring of blank lines at top of text elements
                                                                          • Fixed an issue when cut/paste, drag/drop in Piano Roll Editor does not preserve NoteEvent values
                                                                          • Fixed a playback of chord symbols attached to fret diagrams
                                                                          • Fixed a note entry suggested position with no selection and last selected note in voice > 1
                                                                          • Fixed a display of the bold and underlined texts
                                                                          • Fixed the "Save Online" on AppImages

                                                                          List of other issues resolved

                                                                          Here is a complete list of all the other issues resolved and improvements made in this update:

                                                                          Playback

                                                                          • #305069: Chord symbols attached to fret diagrams don't play back
                                                                          • #306524: Control playback speed with the keyboard

                                                                          Layout and automatic placement

                                                                          • Optimized chord symbol/fretboard alignment algorithm
                                                                          • #4867: Rests in measures should be grouped according to time signature
                                                                          • #306821: Huge spaces between music staves and tablature with offset rests in voice >1
                                                                          • #306438: Wrong default position of Chord Symbols attached to fret diagrams
                                                                          • #306750: Chord symbol alignment incorrectly forces alignment between above & below chords and across staves
                                                                          • #306751: Chord symbol alignment changes default position without reason
                                                                          • #306371: Note Entry - wrong position with no selection and last selected note in voice >1
                                                                          • #307047: An issue of deciding stem lengths with tremolos
                                                                          • #294768: Tremolos for small chords remain big in 3.x
                                                                          • Slightly alter the position of one-note tremolo strokes to make them look better
                                                                          • Setting a decent default (3.0sp) for the chord symbol alignment algorithm.

                                                                          Linked staves and parts

                                                                          • #304880: Wrong stem length in generated parts

                                                                          Images

                                                                          • #292606: Image attached to a measure doesn't show
                                                                          • #307741: images attached to measures don't propagate between score and existing parts

                                                                          Usability

                                                                          • #306560: Toolbar zoom box does nothing
                                                                          • #306598: Canvas: impossible to choose a custom zoom default, difficult to override in toolbar
                                                                          • #306612: Cannot insert horizontal frame from another frame using palette
                                                                          • #276671: Note input mode is incorrecrly switched for tabulatures and drumsets
                                                                          • #306509: Improvements to zoom functionality
                                                                          • #299214: Reimplement Shift+L/R for leading space while in edit mode upon notehead
                                                                          • #305871: Add ability to change note to tuplet to right click menu in Piano Roll Editor
                                                                          • #305876: Make dragging note in PRE visible for tools other than Select
                                                                          • #306807: Go to empty trailing measure bug

                                                                          Piano Roll Editor

                                                                          • #305694: Cut/paste, drag/drop in Piano Roll Editor does not preserve NoteEvent value

                                                                          Text

                                                                          • #307075: [Windows, Linux] Bold and underlined text is not displayed properly
                                                                          • #306633: Status bar text does not update after editing text
                                                                          • #307721: Blank lines ignored at top of text elements

                                                                          Visual interface

                                                                          • #306480: Inconsistent status bar keywords
                                                                          • #306502: Toolbar item states are incorrect after applying preferences
                                                                          • #306512: Improvements to the splash screen
                                                                          • #306832: Time signature properties are just showing a black box

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #306816: Crash when select Realize Chord Symbols by right clicking chord symbol with Fretboard Diagram
                                                                          • #305293: Crash on load if percussion staff with no drumset uses custom notehead
                                                                          • #306964: Crash when changing the numerical value of Fretboard Diagram “Maximum shift above” and then delete chord symbol
                                                                          • #306517: Crash with fotomode (when switching out of it)
                                                                          • #306917: Crash on tie in score with parts
                                                                          • #302573: Crash undoing add instruments

                                                                          Plugins

                                                                          • #306878: Plugins with dialogs open their dialog in the background (behind the main MuseScore window)
                                                                          • #306551: Make all symbols accessible to plugins

                                                                          MusicXML, Capella, MIDI, audio files, svg export/import

                                                                          • #306317: Multi-page scores yield invalid MusicXML
                                                                          • #305313: MuseScore generates unparseable MusicXML for ampersands in chord names
                                                                          • #306725: [MusicXML] - articulations soft accent, stress and unstress not imported or exported

                                                                          Performance

                                                                          • #293203: Apply/OK of Preferences is very slow

                                                                          Accessibility

                                                                          • #113551: Missing screenreader output to state whether you are in Note Input mode or not
                                                                          • #306726: [Accessibility] - Note input in MuseScore 3.5 beta not read
                                                                          • #306222: Screen Readers: No speech for add/remove element shortcut
                                                                          • #47326: Text on scores not read by screen readers while editing it
                                                                          • Screen readers: Say accessible info and message together

                                                                          Miscellaneous

                                                                          • #307005: Chord playback default not consistent
                                                                          • #307593: Prevent duplicated icon on Ubuntu
                                                                          • #281616: MuseScore 3 is not available as a PortableApp on Windows
                                                                          • #306333: Various type of edits change the measure count
                                                                          • #306603: Measure number vertical offset interpreted incorrectly
                                                                          • #306234: smoothPan ignores repeats
                                                                          • #154816: Shortcuts may produce wrong notes in repitch mode on percussion staves
                                                                          • #298820: Can't minimize Musescore or change virtual desktop on Linux with Gnome-based desktop environments
                                                                          • #286144: No or wrong text styles assigned to subtitle, composer, lyricist, name of the part in parts of scores imported from MuseScore 2
                                                                          • #306936: Rhythm mode: duration command should use pitch of previous note where possible
                                                                          • #306687: Rhythm input cancels triple/quadruple dots
                                                                          • #306560: Adding notes to a tuplet now adds them with respect to the tuplet's space.
                                                                          • Use "Merge matching rests" in the closed score SATB and barbershop templates

                                                                          Developers' area

                                                                          • Fix version concatenating to the MuseScore*.zip source code archive
                                                                          • AppImage: Bundle libssl1.0.0 (OpenSSL) to fix Save Online
                                                                          • GitHub Actions: Don't use cached Recipe for AppImage
                                                                          • fix translation of barline names in barlines inspector

                                                                          Release notes for MuseScore 3.5 Beta (June 10, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.5.0.27580, Windows 7+ (32 and 64-bit): 3.5.0.12237, Linux AppImage: 3.5.0 (revision: b5add95) 2020-06-10 https://musescore.org/en/3.5beta

                                                                          New features

                                                                          • Diatonic pitch up/down (keep degree alterations) shortcuts
                                                                          • Select Similar Elements: Same Beat

                                                                          Improvements

                                                                          • Automatic collision avoidance between rests and notes/rests in other voices
                                                                          • Staff property to automatically merge rests between voices
                                                                          • Allow selection of multiple similar items with shift+click
                                                                          • Allow "repeating a note" by clicking a notehead then pressing "R" in normal mode
                                                                          • Changes made in Preferences are applied significantly faster
                                                                          • Style options to align chord symbols within systems
                                                                          • More zoom controls
                                                                          • Additional plugin capabilities

                                                                          Fixes

                                                                          • Brackets were displaced in Continuous View
                                                                          • Nested tuplets in linked staves led to corruption
                                                                          • Octave selection was inconsistent in note input mode
                                                                          • Voices worked incorrectly in the parts dialog in some cases
                                                                          • Misclicking when attempting to create a range selection caused the current selection to be lost
                                                                          • On-screen rendering of synthetically emboldened fonts was broken in some cases
                                                                          • Smooth scrolling worked wrong in Continuous view when dealing with repeats
                                                                          • Saving Online a yet unsaved or uncompressed (mscx) file didn't work

                                                                          List of other issues resolved

                                                                          Here is a complete list of all the other issues resolved and improvements made in this update:

                                                                          Playback

                                                                          • #305745: Chord symbol playback: add9 chords not playing back or being realized correctly
                                                                          • #305069: Chord symbols attached to fret diagrams don't play back

                                                                          Layout and automatic placement

                                                                          • #278538: Implement collision avoidance between rests and notes/rests in other voices
                                                                          • #290968: Multi-measure rest numbers disappear during scrolling
                                                                          • #304292: Invisible beams influence lyrics distance from staff
                                                                          • #304843: Brackets displaced in Continuous View
                                                                          • #304353: Melisma Collides With Next Words/Syllables in Lyrics
                                                                          • #305487: Invisible accidentals take space
                                                                          • #85876: Breath marks to non-voice 1 notes are placed wrongly
                                                                          • #304057: Chord Symbol offset keeps resetting to zero
                                                                          • #305007: Stems too long for chords with single-note tremolo

                                                                          Linked staves and parts

                                                                          • #305717: Chord symbols attached to fret diagrams don't link to parts
                                                                          • #305750: Nested tuplets in linked staves lead to corruption
                                                                          • #279773: Articulations are duplicated on adding linked staves, crash is possible
                                                                          • #283964: Linked parts for single voices don't work

                                                                          Notation related commands

                                                                          • #138266: Add staff property to 'collapse' rests in multi-voice context into just one
                                                                          • #292393: Pasting tremolo between dotted notes leads to wrong rhythm
                                                                          • #97376: Split Measure breaks slurs and ties
                                                                          • #305265: Bracket added from palette only spans one staff regardless of selection
                                                                          • #305814: Adding Intervals via "alt + number" command.
                                                                          • #281759: Chord Symbols: allow option to ensure uniform vertical alignment
                                                                          • #291522: Double-click on drum palette produces wrong note when transposing instrument at top of score and concert pitch off
                                                                          • #305428: TextLine doesn't cause a multi-measure break
                                                                          • #305941: Changing octaves for ambiti doesn't work correctly
                                                                          • #277796: Inconsistent octave selection in note input mode
                                                                          • #305477: Erratic behavior of lines in Edit mode
                                                                          • #306092: Adding bracket when nothing selected sets its span to 0
                                                                          • #285135: "Line thickness" parameter of ambitus is not working properly
                                                                          • #305135: Chord symbols won't go back to original position after reverting changes

                                                                          Usability

                                                                          • #305724: Disable save prompt for empty scores
                                                                          • #281666: Parts Dialog Problem with Voices
                                                                          • #305739: Realize chord symbols dialog won't open, even though the option is displayed in the menu
                                                                          • #305741: Reset Positions dialog opens before score is visible, for imported 2.x scores.
                                                                          • #299191: Diatonic pitch up/down (keep degree alterations) shortcuts
                                                                          • #299829: Go to first empty trailing measure et al.
                                                                          • #295235: Select Similar Elements: Same Beat
                                                                          • #68431: Save zoom level with scores, keyboard shortcut for "Zoom to Page Width", ability to set default zoom to "Page Width"
                                                                          • #295257: Shortcut: Page-width with toggling between it and previous zoom level.
                                                                          • #279926: Allow multiple similar items selection with shift+click
                                                                          • #304051: "Repeat a note" by clicking a notehead then pressing "R" in normal mode
                                                                          • #297423: Producing a discontinuous selection is difficult
                                                                          • #297446: Mis-clicking when attempting to create a range selection causes the current selection to be lost
                                                                          • #295020: Suggestion: Transpose "Current Range Selection" Up/Down
                                                                          • #306509: Improvements to zoom functionality
                                                                          • #306512: Improvements to the splash screen
                                                                          • #306524: Control playback speed with the keyboard
                                                                          • #306502: Toolbar item states are incorrect after applying preferences

                                                                          Piano Roll Editor

                                                                          • #304906: Update Piano Levels Filter to shift to the new Fraction based note measurement system
                                                                          • #305315: Piano Roll Editor: string missing from translations
                                                                          • #304876: Piano roll editor: The "Stripe Pattern" options are not translatable.
                                                                          • #304947: Fix chord names in stripe pattern dialog in Piano Roll Editor
                                                                          • #304979: Change of voice menu command not undoable in Piano Roll Editor

                                                                          Text

                                                                          • #281601: Musescore 3 FreeSans bold text rendering is bad
                                                                          • #284218: Broken on-screen rendering of synthetically emboldened fonts

                                                                          Visual interface

                                                                          • #304834: Settings field for multimeasure rests is too small
                                                                          • #304959: Key signatures cropped in New Score Wizard
                                                                          • #306096: Anchors appear on wrong page when moving elements items on page > 1
                                                                          • #306234: Added teleportation to smooth scrolling, for dealing with repeats + improved comments and default value

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #303619: MuseScore crashing when entering font name
                                                                          • #305253: Crash on adding text on a text frame (MS 3.5 Alpha, debug build)
                                                                          • #303799: Crash when starting MuseScore after compare score.
                                                                          • #305869: MuseScore crashes when playing MusicXML file with chord symbols
                                                                          • #270043: Corruption on deleting initial rest in voice 2 tuplet
                                                                          • #301834: Crash when changing local time signature to another one with same duration
                                                                          • #305962: Staff type change in first measure causes a crash
                                                                          • #304957: Crash on attempting to drag header or footer
                                                                          • #305078: Crash on attempting to playback or rewind score.
                                                                          • #305106: Crash when applying preferences with no scores open
                                                                          • #305134: MS 3.5 alpha crash on chord symbols playback

                                                                          Plugins

                                                                          • Plugin API: add access to Staff objects
                                                                          • Plugin API: correct handling of spatium units for more property types
                                                                          • Plugin API: add basic API for access to Instruments and Channels
                                                                          • Plugin API: add an ability to append parts to a score
                                                                          • Plugin API: add tuplets support
                                                                          • Plugin API: add Cursor.addRest() method
                                                                          • Plugin API: add basic access to score style settings
                                                                          • Document initial version for notehead scheme properties in plugins API
                                                                          • #293017: QML api: "Select an element" needed so plugins can search
                                                                          • #305017: PluginAPI: cursor.addNote(<note>, true) fails to add a note
                                                                          • #305018: Crash when a plugin uses a cursor without calling rewind

                                                                          MusicXML, Capella, MIDI, audio files, svg export/import

                                                                          • #305169: [MusicXML Export] add tuplet-actual and tuples-normal for nested tuplets
                                                                          • #305704: Can't export mp3 on OS X 10.15 using MuseScore 3.5.0
                                                                          • #289952: "gliss." text is misplaced on exporting score as image
                                                                          • #299761: [MusicXML Export] - Measure rest should be reflected
                                                                          • #305407: [MusicXML Export] - Add Let_Ring and Palm_Mute

                                                                          Instruments

                                                                          • More comments in instruments.xml and better sound for lutes with courses
                                                                          • #305701: About default Treble Clef for Greek Bouzouki
                                                                          • #305123: New Instrument: Concert Cimbalom

                                                                          Performance

                                                                          • #303983: MuseScore takes very long on opening some 2.X scores
                                                                          • Improved preferences window performance on applying changes

                                                                          Miscellaneous

                                                                          • Fix man-page to mention changed default DPI setting for PNGs export
                                                                          • Change default pdf dpi export to rendering value
                                                                          • #305130: Misleading shortcut descriptions
                                                                          • #305676: Repeat barline tooltips in Repeats & Jumps palette are not getting translated
                                                                          • #280244: User fonts not visible to MuseScore 3 (Windows 10)
                                                                          • #306370: Status bar should display playback pitch of selected note
                                                                          • #305359: Allow old B-agpipe M-usic W-riter format .bmw (in addition to the newer .bww)
                                                                          • #305589: Attempting to Save Online a yet unsaved or uncompressed (mscx) produces misleading error message
                                                                          • #305656: Two piano instruments shown for a single piano part after save/load
                                                                          • #304918: Channel lists contain bad values after an instrument change

                                                                          Developers' area

                                                                          • Fix mtests under Windows MSVC
                                                                          • #305209: ticks_f warnings when loading a custom workspace
                                                                          • #305125: Crash in debug build when dragging selected notes

                                                                          Release notes for MuseScore 3.5 Alpha (May 6, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.5.0.26969, Windows 7+ (32 and 64-bit): 3.5.0.11614, Linux AppImage: 3.5.0 (revision: 1ee2fe3) 2020-05-06 https://musescore.org/en/3.5alpha

                                                                          New features

                                                                          • Option available in Preferences for playback of chord symbols
                                                                          • Mid-staff instrument changes now do almost everything automatically (see below)
                                                                          • Support for Orca (Linux) screenreader
                                                                          • Hairpins, voltas, and other lines now adapt anchor points when dragged
                                                                          • Much more functional piano roll editor (see below)
                                                                          • Splash screen displays progress messages while loading MuseScore
                                                                          • #293113: New Score Wizard automatically numbers instruments
                                                                          • #18897 partial fix: Property for beam style of tremolo (all strokes attached to stems)
                                                                          • #296075: Style for hiding brackets which span to a single staff when empty staves are hidden
                                                                          • #203026: Properties and styles for measure number positioning, including centered and below staff
                                                                          • #65241: Property and style for position of multimeasure rest numbers
                                                                          • #299644: Property for fretboard diagram rotation

                                                                          Improvements

                                                                          • #16077: Double-click a header, footer, or instrument name to access the dialog for editing it
                                                                          • #27371: Score tabs can now be closed using mouse middle button
                                                                          • Improved layout of two-note and single-note tremolos, with and without stem
                                                                          • #93376: Smooth scrolling during playback in Continuous view
                                                                          • Various improvements to simplify searching and loading backup files
                                                                          • #303617: Metric modulation for dotted eighth to quarter

                                                                          Fixes

                                                                          • JACK audio/MIDI worked incorrectly on some platforms
                                                                          • #148311: Loop playback skipped final rests in the last measure
                                                                          • MIDI note-off events were not sent in some cases
                                                                          • Undoing slur addition to a range only removed one slur
                                                                          • Canceling a selection worked incorrectly in some cases
                                                                          • macOS package was not notarized in Apple
                                                                          • Various fixes for the text editing process

                                                                          List of other issues resolved

                                                                          Here is a complete list of all the other issues resolved and improvements made in this update:

                                                                          Playback

                                                                          • #299697: Repeat play a bar, goes back to first bar briefly
                                                                          • Playback multiple subsequent grace notes as acciaccaturas
                                                                          • #301340: Dynamic playback after repeats does not match with score
                                                                          • #303678: Add ability to change tuning for more quarter tone accidentals (one and a half sharp, one and a half flat)
                                                                          • Add channel and polyphonic aftertouch support to fluid
                                                                          • #290034: Repeats play in newly-opened scores, even if "Play Repeats" button is OFF
                                                                          • #289898: Cresc./dim. are ignored for tremolos

                                                                          Synthesizer, MIDI, JACK, etc.

                                                                          • #279471: Allow for note cutoff time to be specified in absolute rather than relative values
                                                                          • #294834: Midi note-off messages not sent during editing
                                                                          • #294836: Midi note-off messages not sent when stopping playback
                                                                          • #153656: Pedal On/Off shouldn't be immediate for compatibility reason
                                                                          • #301116: Don't write default note event values along with non-default ones

                                                                          Layout and automatic placement

                                                                          • Fix wrong hairpin length if score ends with MM rest
                                                                          • #302571: Disappearing beam while editing slur node
                                                                          • Fix some spanner segments not scaled after spatium change
                                                                          • #277712: repeat sign when add lines
                                                                          • #297482: Score layout shifts when saved etc.
                                                                          • #297501: Layout shift of slur after reload
                                                                          • #301115: Invisible articulations affect layout of other articulations
                                                                          • #121416: Show instrument name on lower staff when upper staff of multi-staff instrument is empty and hidden
                                                                          • #290409: Stave brackets disappear on a 1 line percussion staff
                                                                          • #301684: Different clefs when concert pitch
                                                                          • #298638: Disable courtesy clef doesn't restore layout of previous system
                                                                          • #300693: Figured bass continuation not drawn to end note in voice > 1
                                                                          • #284344: Ambitus not redrawn on Update Range
                                                                          • #300738: Ottava (8va/8vb) number is too big
                                                                          • #294085: All elements set to normal position if all rests in voices other than voice 1 are deleted
                                                                          • #302281: Wrong default note group for thirty-second note in 12/8
                                                                          • #293593: Issues with ottavas
                                                                          • #299246: Hiding courtesy time signature only works for the first staff
                                                                          • #302316: String number under slur interferes with slur.
                                                                          • #285434: Certain 2.x frame texts imported with no style, resulting in wrong size etc.
                                                                          • #280343: Repeat measure signs: not vertically-centred in tablature
                                                                          • #298273: System divider goes away
                                                                          • #294890: Spacing for center-aligned chords not honored until second layout
                                                                          • #301555: Invisible arpeggios and glissandi occupy space
                                                                          • #291699: Stems and beams for small chords don't align correctly
                                                                          • #302590: Inconsistent alignment of chord name above fretboard
                                                                          • #301259: Wrong offset used for text elements with non-default text styles

                                                                          Notation related commands

                                                                          • #291688: Time signature change doesn't appear in parts which don't have voice 1
                                                                          • #43906: Support for entering 256th, 512th and 1024th notes/rests
                                                                          • #294298: Diagonal line: End hook can disappear or elongate when Begin hook is set to "None"
                                                                          • #301478: Relative text position inside a frame is not saved for scores imported from 2.x
                                                                          • #298959: Note changes pitch, but accidental is not changed
                                                                          • #105936: Tempo entered in Create New Score wizard always uses quarter note
                                                                          • #284682: Position offset when moving cross-beam notes with the mouse
                                                                          • #301605: Undoing slur addition to a range only removes one slur
                                                                          • #298541: Chord symbols deleted on paste
                                                                          • #301103: 'Straight' text does not work, since all options in the "Swing settings" tab are unchecked
                                                                          • #301174: Undo selects an extra measure
                                                                          • Make measure numbers deletable
                                                                          • #299768: Hairpin: when copied, all custom settings are lost and the element resets to default
                                                                          • #287998: Courtesy time signature not removed when subsequent measures are deleted
                                                                          • #284434: "hide courtesy key signature" not working when hiding for only one staff of multiple-staff score from context menu
                                                                          • #286497: Unchecking 'Create courtesy clefs' hides all clefs at the beginning of a measure
                                                                          • Fix extending hairpin to multiple systems with Shift+arrow with middle grip selected
                                                                          • #280584: Changing clef with courtesy disabled changes courtesy but not main clef
                                                                          • #151121: Clef disappears into the second measure when courtesy clefs are disabled
                                                                          • #300718: Cannot increase the duration of a chord/rest within a nested tuplet.
                                                                          • #301753: Allow figured bass directly on selected rest (in bass line)
                                                                          • #288495: Allow user to select flats or sharps for enharmonic key signatures
                                                                          • #280311: Tie broken when using Split Staff
                                                                          • #286058: Changing Key Signature in Main Score (Via Transposition) Does Not Result in Changed Key Signature in Part
                                                                          • #287662: Key signatures at start of selection transposed via Tools / Transpose lost on save
                                                                          • #229246: Staff incorrectly numbered in "Instruments" dialog

                                                                          Usability

                                                                          • #293129: Lyrics mode: shift+left/right does not take effect until release of Shift
                                                                          • #301124: "Score pathname" in "Score properties" not updated on "Save As..."
                                                                          • #121906: annoying tooltip while editing footers
                                                                          • Make the remaining templates to fit one page for a better thumbnail
                                                                          • #302372: Palette Search: filters palettes but not items
                                                                          • #279859: immediately dropping break onto vertical/text frame doesn't always get applied
                                                                          • #303403: "Play Repeats" button does not reflect default repeat behavior
                                                                          • #302388: Insert instrument into list at selected point instead of always at the bottom
                                                                          • #301929: No reminder to save, if you quit program before entering anything in a new score
                                                                          • #300926: Problem selecting and entering a whole note
                                                                          • #288679: Can't add shortcut for save as
                                                                          • #298955: Duplicate elements applied for each note in chord with range selection
                                                                          • #297426: The playback cursor is not repositioned when selecting items other than notes, rests or measures
                                                                          • #304612: In context menus, "Remove Selected Measures" uses wrong string and does not show shortcut, and/or does not appear
                                                                          • #291314: Make double-clicking volta in palette get applied to measure's first staff by default, unless user holds control to drop to the selected staves
                                                                          • #302171: Preferences | Shortcuts should also search by keyboard shortcut
                                                                          • #101991: Menu mnemonics A-G create note in note input mode
                                                                          • Add reveal in finder / show in explorer / open containing folder option in metaedit dialog.
                                                                          • Add support for deleting (custom) metatags.
                                                                          • Clicking 'style...' when the selection is a measure number opens the right edistyle page
                                                                          • Fix anchor lines disappearing after dragging an edit grip
                                                                          • Draw anchors at staff bottom if element is placed below
                                                                          • Always show anchor lines for elements which have them
                                                                          • Fix restricting dragging text elements to page boundaries
                                                                          • #301108: Difficulty canceling a selection
                                                                          • #303194: Wrong working directory when MuseScore is launched via a file association under Windows
                                                                          • #302282: Note entry does not begin on first chord or rest in selected range

                                                                          Piano Roll Editor

                                                                          • #304302: Add buttons to piano roll editor to make editing options explicit
                                                                          • #278988: Allow copy and paste of notes in piano roll editor
                                                                          • #278977: Allow individual stripes to be highlighted in piano roll editor
                                                                          • #279210: Allow changing properties of multiple notes in piano roll editor
                                                                          • #289425: Add more means to zoom in piano roll editor

                                                                          Playback panel

                                                                          • #295443: Edit > Preferences > Note input > Enable MIDI input vs. Toolbar > Toggle 'MIDI Input'
                                                                          • #123141: Playback panel: Turning loop OFF leaves loop in/out buttons ON

                                                                          Palettes

                                                                          • Palettes: Avoid triggering application shortcuts
                                                                          • Add Measure Number element to palettes
                                                                          • #300596: Select-all [Palette Search] text upon utilizing shortcut command for fresh searching
                                                                          • Palettes: Implement Type-Ahead Find with incremental search

                                                                          Inspector

                                                                          • #302603: Changing "Direction" has no effect on bowing symbols
                                                                          • #288372: S button beside "placement" property of fingering resets the property
                                                                          • #288962: Score display does not respond to unchecking of "Begin/Continue/End text" boxes
                                                                          • #301304: Text style parameters not updated
                                                                          • Make several inspectors collapsible
                                                                          • Fix margin and spacing of tuplets inspector
                                                                          • #297176: Intending to scroll Inspector panel modifies property value if cursor is above

                                                                          Instrument Change

                                                                          • Show "Select Instrument" dialog on adding instrument change
                                                                          • Automatically change clef and/or key signature for new instrument
                                                                          • Automatically change text of instrument change notation to new instrument
                                                                          • Automatically change long and short instrument names to new instrument
                                                                          • Maintain instrument change transpositions when changing key signature
                                                                          • Automatically reverse clef, key, and text changes when instrument change is deleted
                                                                          • Add instrument change only once for range selection
                                                                          • #289006: Expose "Select Instrument" in Inspector for Instrument Change text

                                                                          Text editing

                                                                          • #295156: Text edit mode: Select All shortcut does not highlight text until [Ctrl] is released (regression)
                                                                          • #292652: Blank lines of text consisting only of a RETURN are too small in height on some scores
                                                                          • #293724: Ctrl + Backspace does not work
                                                                          • #291402: Text edit mode: newline character can't be removed by Delete
                                                                          • #295544: Actions applied during text editing more automatically revert on return to normal mode

                                                                          Save Online

                                                                          • Prevent the loss of the user's score URL by automatically saving the local score file when receiving the URL from the web server during the “Save Online” operation.

                                                                          Selection Filter

                                                                          • #301543: Selection Filter's Checkbox Not Checked After Restart
                                                                          • Split Selection filter for Dynamics/Hairpins and Articulations/Ornaments

                                                                          Backup files

                                                                          • #295701: Able to open backup files as an import
                                                                          • #125656: Put the backup file in a separate folder
                                                                          • Add (advanced) preference for backup folder. To get the old behavior, just set the setting "application/backup/path" to an empty string. Its default value is ".mscbackup"
                                                                          • #295310: Add an advanced preference option of disabling backup file generation

                                                                          Visual interface

                                                                          • #279877: Continuous view: white block appears when wallpaper changed from default to PNG image
                                                                          • #293785: Chord symbols jump when user goes into edit mode
                                                                          • #304613: Format > Style > Measure numbers : The 2 dots ":" are missing after "Horizontal placement"
                                                                          • #292606: image attached to a measure doesn't show
                                                                          • Use palette background color for keysig chooser in the New Score Wizard
                                                                          • Fixed anchors blinking effect during the drag
                                                                          • Fixed clipping issue in Note Spelling (edit style ui)
                                                                          • #276002: "Dark" Theme for the Timeline
                                                                          • #302114: Wrong default GUI font under Windows
                                                                          • #278080: Request to show empty page rather than no page for score with no content
                                                                          • #304466: The “I/O” tab of the “Preferences” dialog should use radio buttons instead of checkboxes
                                                                          • #277472: Tour dialogs overlap with the highlighted area
                                                                          • #300912: Adjustment handles don't disappear immediately after undoing adding element
                                                                          • Visual interface fixes for bend canvas

                                                                          Corruptions and/or loss of data, crashes

                                                                          • Fix various crashes reported via crashReporter
                                                                          • Fix a critical error when importing ove files
                                                                          • Score comparison tool: avoid crash on inability to merge text diffs
                                                                          • Fix a crash on leaving text edit mode without editing text
                                                                          • #302643: Crash on advancing to next chord symbol with no chord symbol entered
                                                                          • #303189: Staff/Part properties >> Advanced Style Properties >> Stemless crashes MuseScore
                                                                          • #300635: Crash when using palette item upon a staff-text
                                                                          • #303712: Crash when extending note into "let ring" and "Palm Mute"
                                                                          • #304238: Crash when using 'Image capture'
                                                                          • #298108: Sporadic Crash when dragging a 'Brace' from palette to score using Bravura
                                                                          • #304333: Using Edit > Preferences causes crash when no score is open
                                                                          • #302304: Musescore 3 Crashing
                                                                          • #299788: Crash when deleting a local Time Signature.
                                                                          • #301847: Crash on copying a measure Number
                                                                          • #292631: Crash when glissandos break a certain layout
                                                                          • #295207: Mscz file corrupted after splitting a measure
                                                                          • #300855: Trying to add text to a vertical/horizontal frame after double click causes crash
                                                                          • #303585: MuseScore crashes when trying to open a no longer existing score
                                                                          • #282492: Musescore crashes trying to open a mscz converted from a PDF
                                                                          • #289643: Crash when launching playback in presence of unexpected voltas
                                                                          • #302447: Crash on space in score part id
                                                                          • #301436: Iterating over elements with Alt+right in score with MM rest shows weird barlines, crash is possible
                                                                          • #302011: Grace note tie crash
                                                                          • #301488: Changing instruments from a tablature crashes the program
                                                                          • #298899: Accessibility: crash on Palette search with Qt 5.9 and NVDA
                                                                          • #301946: Crash when realtime automatic reaches end of partition
                                                                          • #301414: Corrupt tie created on paste of tied note that requires additional tie
                                                                          • #303611: Adding fixed spacer can clash with vertical frame below, causing a crash.

                                                                          Accessibility

                                                                          • Fix telemetry dialog accessibility
                                                                          • Make note input ToolButtonMenu accessible for keyboard users
                                                                          • #301584: Palettes: give all elements unique names
                                                                          • #239181: No (useful) screenreader feedback on fretboard diagrams
                                                                          • #297040: Accessibility: Palette keyboard navigation is non-standard
                                                                          • #301789: Accessibility: no speech for key signature chooser in New Score Wizard
                                                                          • #302822: [Accessibility] - Breaks can't be accessed via keyboard
                                                                          • #301496: Voltas not reachable by keyboard
                                                                          • #299387: Support screenreaders other than NVDA

                                                                          Plugins

                                                                          • Plugin API: add Score.pageNumberOffset property
                                                                          • Remove manual (helpbrowser) from the plugin creator. Clicking on the help button now opens the online API.
                                                                          • Add interactive version of Note Names plugin
                                                                          • Add documentation for state.undoRedo in onScoreStateChanged handler in plugins
                                                                          • Add Cursor.stringNumber property to use with tablature scores
                                                                          • Add Cursor.rewindToTick() function
                                                                          • Allow plugins choose if Cursor is synchronised with score input state
                                                                          • Plugins: fix a crash on getting element's parent if parent is null
                                                                          • #299539: Plugins are not run correctly when running musescore in converter mode.
                                                                          • #303495: ABC plugin not working on macOS 10.14 or later
                                                                          • #301561: MuseScore2 to Musescore3 : pagenumber pagepos ?

                                                                          MusicXML, Capella, MIDI, audio files, svg export/import

                                                                          • #301113: [MusicXML import] page size and margins not imported
                                                                          • #271445: Include .xml suffix for export
                                                                          • #301671: [MusicXML export] section breaks in horizontal frames do not reset measure numbers
                                                                          • #301672: [MusicXML import] crash on empty credit-words
                                                                          • #299661: [MusicXML export] breaks in horizontal frames not exported
                                                                          • #23187: [MusicXML export] Layout exports despite being disabled in Preferences
                                                                          • #303780: Can't export musicxml file to midi via mscore command line on OSX Catalina
                                                                          • #300542: [MusicXML import] word-font not imported
                                                                          • #294643: [MusicXML export] harmonic notation not exported
                                                                          • #301320: [MusicXML import/export] incorrect handling of small notes, grace notes and cue notes
                                                                          • #104731: Text lost when musicXML file imported
                                                                          • #291758: [MusicXML export] - Tbox and Vbox after measure 1 don't export
                                                                          • #298855: [MusicXML export] - trill on rest not exported
                                                                          • #57791: [Capella import] Add support for importing chord symbols
                                                                          • #290764: MuseScore saves out invalid MusicXML file
                                                                          • #301079: Request: Add track names to exported midi file
                                                                          • #302118: Need 24 and 32 bit audio exports
                                                                          • #303902: Export to SVG with trim via command line results in blank image
                                                                          • #300694: Capella .capx import doesn't properly recognize hidden empty staves at start of score
                                                                          • Fix audio export of scores with incorrect synthesizer settings in non-GUI mode

                                                                          Instruments

                                                                          • Pocket Sax improvements
                                                                          • #303863: MuseScore Tone
                                                                          • #290987: B# and Cb octave change
                                                                          • #300172: Problems with Bass Clarinet
                                                                          • #304756: "Vocals" 'instrument' has wrong ranges set in instruments.xml and the templates using it
                                                                          • #301656: Additional brass instrument "Baritone horn (Central Europe)" for the list of instruments.
                                                                          • Adding Spanish Bandurria and Spanish Laud popular instruments
                                                                          • #304452: How do you unmute an electric guitar?
                                                                          • #301529: Wrong Sound for Brass Instrument Cimbasso
                                                                          • #283111: The Octobass; an instrument 2 octaves below the cello, in the Bass clef 15mb.
                                                                          • #188771: Muted trombone?
                                                                          • #302009: E-flat Piccolo Soundfont?
                                                                          • #302586: Automatic Transposition Issue?

                                                                          Miscellaneous

                                                                          • Update Bravura and BravuraText to latest Steinberg version 1.32
                                                                          • Fix MacOS notarization error
                                                                          • Add SMuFL "Other baroque ornaments" section (U+E570–U+E58F) to mscore.ttf
                                                                          • add Breton language
                                                                          • #301786: Add Barbershop Quartet Template for Women
                                                                          • #287955: In Windows Explorer, files with special characters in filepath don't open when double-clicked
                                                                          • #301387: Wyschnegradsky Accidentals missing in Accidentals Pallete
                                                                          • Add framework for handling unrecoverable errors in MSCZ files data
                                                                          • Make 'Hide courtesy clef' available for both courtesy and main clef, similar to what happens in the inspector
                                                                          • #301600: Option to disable the pop-up "Reset the positions of all elements?"
                                                                          • #282246: "Other" appearance in Time Signature Properties does not work
                                                                          • #294542: Allow setting notehead scheme on a note-by-note basis in the Inspector
                                                                          • #188061: Values in sp unit don't remain unchanged after changing spatium
                                                                          • #275659: Page Settings - Redundant "undo" ent
                                                                          • Fix file type filter sometimes not shown when saving

                                                                          Telemetry

                                                                          • Disable sending all events to telemetry, but the ones responsible for Crash Free ratio

                                                                          Developers area

                                                                          • #303707: Enable compilation and running of mtests on Windows with MSVC
                                                                          • #286842: Assertion failure on adding instrument change in score with parts
                                                                          • Switch AppVeyor builds environment to Microsoft Visual Studio 2019
                                                                          • fixed issues from PVS-Studio report
                                                                          • Reload sources for QmlDockWidgets if errors occur the first time

                                                                          Release notes for MuseScore 3.4.x

                                                                          Release notes for MuseScore 3.4.2 (February 7, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.4.2.25137, Windows 7+ (32 and 64-bit): 3.4.2.9788, AppImage: 3.4.2 (revision: 148e43f) 2020-02-07 https://musescore.org/en/3.4.2

                                                                          Fixes

                                                                          • Telemetry dialog was not accessible for visually impaired people
                                                                          • Drum input palette worked incorrectly due to the changes involving single click behaviour
                                                                          • MuseScore crashed when pressing numbers/letters in a different voice when inputting tabs
                                                                          • Hidden pedal items were no longer displayed
                                                                          • "L" letter could not be typed when entering text

                                                                          Complete list of issues resolved and improvements implemented

                                                                          • Users can now iterate through the telemetry dialog using 'Tab' key
                                                                          • Add support for key input in telemetry dialog (Esc, ArrowUp, ArrowDown, Enter)
                                                                          • Revert to double-click to apply elements from drum input palette
                                                                          • #299654: Crash on startup with Qt 5.14
                                                                          • #300393: Note Name Plugin in Musescore 3.4: results hard to read
                                                                          • #299369: [TAB] Crash when pressing numbers/letters in a different voice
                                                                          • #300502: Hidden pedal items are no longer displayed
                                                                          • #300279: Impossible to apply properties to all parts in 3.4.1
                                                                          • #300347: Rehearsal mark does not accept letter L
                                                                          • #293181: Deleting measures leads to corrupting the other linked staff if their display has been reversed

                                                                          Release notes for MuseScore 3.4.1 (January 25, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.4.1.25011, Windows 7+ (32 and 64-bit): 3.4.1.9660, AppImage: 3.4.1 (revision: 20414b2) 2020-01-25 https://musescore.org/en/3.4.1

                                                                          Fixes

                                                                          • MuseScore crashed after closing a menu bar pop-up window if no score is opened
                                                                          • Audio glitches on note input and playback happened on macOS and other platforms
                                                                          • Parts corruption happened on timewise delete of individual beats
                                                                          • Crash happened when undoing "Beam middle" setting on a single note
                                                                          • Pedal lines alignment applied to the whole system, not individual staff

                                                                          Complete list of issues resolved and improvements implemented

                                                                          • #300107: Crash after closing a menu bar pop-up window if no score is loaded
                                                                          • #280493: Fix audio glitches on note input and playback on MacOS
                                                                          • #290096: Fix parts corruption on timewise delete of individual beats
                                                                          • #299807: Fix a crash on undoing "Beam middle" setting on single note
                                                                          • #284441: Implement per-staff alignment of pedal lines
                                                                          • MuseScore 3.4 Release notes

                                                                          Release notes for MuseScore 3.4 (January 24, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.4.0.24982, Windows 7+ (32 and 64-bit): 3.4.0.9632, AppImage: 3.4.0 (revision: 8effb8d) 2020-01-24 https://musescore.org/en/3.4

                                                                          New

                                                                          • Apply palette elements with a single click if there is a selection in the score
                                                                          • Allow dragging notes horizontally
                                                                          • Slurs, hairpins and other elements can be edited after single click
                                                                          • Add middle adjustment handle for beams, for moving whole beam vertically

                                                                          Improvements

                                                                          • Double click is not needed to reach edit mode anymore
                                                                          • Introduce section break properties, bend properties, tremolo bar properties in the Inspector
                                                                          • Allow access to several properties window in the Inspector
                                                                          • Name of the newly created custom palette can be specified
                                                                          • Accessibility: improve speech for elements with spanners

                                                                          Fixes

                                                                          • "Don't play trill" option silenced the note playback
                                                                          • Slurs on small staves were displaced in some cases
                                                                          • Barline handles were drawn incorrectly after dragging one
                                                                          • Strings in the Part dialogue were ambiguous
                                                                          • Y Offset value of fretboards didn't restore after undoing the values being changed from Edit Mode
                                                                          • Replacing a note with an accidental left the accidental on the new note
                                                                          • Adding Intervals (above/below) didn't take into consideration the accidental toggle state
                                                                          • Multiple chord symbols attached to same note didn't copy as part of the range
                                                                          • Strings in fret diagrams without "X" or "O" displayed as "?" on Linux
                                                                          • MuseScore crashed when changing a triplet's rest's duration
                                                                          • Images attached to rests weren't imported from MuseScore 2
                                                                          • Tremolo Bar dialog had multiple UX issues
                                                                          • AppImage: system printers weren't available in the print dialog

                                                                          Complete list of issues resolved and improvements implemented

                                                                          • MuseScore 3.4 Beta release notes
                                                                          • MuseScore 3.4 Release Candidate release notes
                                                                          • #299923: Сrash on dragging a hairpin handle after adding it and pressing Escape
                                                                          • #299883: Allow using Ctrl+arrow on grips in normal mode
                                                                          • #298141: Сrash on deleting an element being dragged
                                                                          • #284073: Fermatas do not respond to selection filter
                                                                          • Plugin API: make spatium usage in positioning properties more consistent

                                                                          Release notes for MuseScore 3.4 Release Candidate (January 18, 2020)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.4.0.24912, Windows 7+ (32 and 64-bit): 3.4.0.9562, AppImage: 3.4.0 (revision: 716655c) 2020-01-18 https://musescore.org/en/3.4rc

                                                                          New

                                                                          • Add middle adjustment handle for beams, for moving whole beam vertically

                                                                          Improvements

                                                                          • Embed Tremolo Bar editor to the inspector

                                                                          Fixes

                                                                          • MuseScore crashed when changing a triplet's rest's duration
                                                                          • Images attached to rests weren't imported from MuseScore 2
                                                                          • Tremolo Bar dialog had multiple UX issues
                                                                          • AppImage: system printers weren't available in the print dialog

                                                                          Complete list of issues resolved and improvements implemented

                                                                          Here is a complete list of the issues resolved and improvements made in this update:

                                                                          Layout and automatic placement

                                                                          • #278169: Images attached to rests not imported from MuseScore 2
                                                                          • #299518: Baroque soprano clef and dotted double bar

                                                                          UI/UX

                                                                          • Enable editing on single click for more elements edited with handles
                                                                          • Move "Properties" buttons inside inspector panels
                                                                          • Improve Split Staff dialog
                                                                          • Move Tremolo Bar Properties into Inspector
                                                                          • Edit elements in normal mode only for the currently focused view
                                                                          • Add middle adjustment handle for beams, for moving whole beam vertically
                                                                          • #299682: Adjustment handles don't update immediately after flipping
                                                                          • #53236: Several problems of Tremolo Bar Properties
                                                                          • #298975: Improve Parts dialog, New Part tool tip

                                                                          Commands/Properties

                                                                          • #299072: Style setting for fingering in Inspector has no items
                                                                          • #299522: Edit mode adjustments are not undoable for some elements
                                                                          • #298966: 3.4 Beta - Reset position (slur) after editing
                                                                          • #298363: Selecting multiple elements with sameType but different subtype doesn't update inspector title
                                                                          • #298272: Inspector of ornaments is titled "Articulation"

                                                                          Corruptions and/or loss of data, crashes

                                                                          • Fix a crash on undoing editing a bracket
                                                                          • #285040: Crash when changing a triplet's rest's duration

                                                                          Plugins

                                                                          • Assign a name for plugins actions
                                                                          • #298480: Starting plugin with root not MuseScore crashes
                                                                          • #275293: Working directory plugin creator

                                                                          MusicXML Export/Import

                                                                          • Fix MusicXML export part of #294815 - [MusicXML Im-Export] - New Transposition and pitches messed up

                                                                          Miscellaneous

                                                                          • Add a command-line option for transposing a score
                                                                          • Support for xaphoon (pocket sax) instrument
                                                                          • #298887: Generic wind.flutes.whistle.tin without key is ambiguous
                                                                          • #297719: AppImage: system printers not available in print dialogue
                                                                          • #299545: Incorrect Harmonica Range
                                                                          • #44796: Guitar Tabs, import .ptb files

                                                                          Release notes for MuseScore 3.4 Beta (December 26, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.4.0.24698, Windows 7+ (32 and 64-bit): 3.4.0.9337, AppImage: 3.4.0. (revision: 684f74e6) 2019-12-26 https://musescore.org/en/3.4beta

                                                                          New

                                                                          • Apply palette elements with a single click if there is a selection in the score
                                                                          • Allow dragging notes horizontally
                                                                          • Slurs, hairpins and other elements can be edited after single click

                                                                          Improvements

                                                                          • Double click is not needed to reach edit mode anymore
                                                                          • Introduce section break properties, bend properties in the Inspector
                                                                          • Allow access to several properties window in the Inspector
                                                                          • Name of the newly created custom palette can be specified
                                                                          • Accessibility: improve speech for elements with spanners

                                                                          Fixes

                                                                          • "Don't play trill" option silenced the note playback
                                                                          • Slurs on small staves were displaced in some cases
                                                                          • Barline handles were drawn incorrectly after dragging one
                                                                          • Strings in the Part dialogue were ambiguous
                                                                          • Y Offset value of fretboards didn't restore after undoing the values being changed from Edit Mode
                                                                          • Replacing a note with an accidental left the accidental on the new note
                                                                          • Adding Intervals (above/below) didn't take into consideration the accidental toggle state
                                                                          • Multiple chord symbols attached to same note didn't copy as part of the range
                                                                          • Strings in fret diagrams without "X" or "O" displayed as "?" on Linux

                                                                          Complete list of issues resolved and improvements implemented

                                                                          Here is a complete list of the issues resolved and improvements implemented in this update:

                                                                          Playback

                                                                          • #298188: 3.3.4: "Don't play trill" silences note -- very bad new bug.

                                                                          Layout and automatic placement

                                                                          • #282893: Figured bass duration line exceedingly thin, almost invisible, and too long
                                                                          • #288576: Strange results when changing 4/4 measues with halfnotes tremolos between notes to 3/4
                                                                          • #298564: Position shift of slur on small staff when reload score
                                                                          • #295892: Missing barline with a horizontal frame followed by start repeat
                                                                          • #293984: Natural accidental doesn't automatically come up for natural notes after a natural-sharp/natural-flat one
                                                                          • #296426: Text attached to mmrest preceded by another mmrest ending with custom barlines loses custom position on reload
                                                                          • #297454: Corruption in local time signature

                                                                          UI/UX

                                                                          • Apply palette elements with single click
                                                                          • Add boundaries for the left-side note dragging
                                                                          • Add visual representation of the 'hit' state when clicking palette cells
                                                                          • Allowed to drag note in both directions at normal mode accordingly to angle
                                                                          • Allowed the user to adjust the left angle of a beam
                                                                          • Enable moving grips with arrow (or Shift+arrow) keys in normal mode
                                                                          • Basic implementation of single-click access to editing elements with grips
                                                                          • Move Section Break Properties into Inspector
                                                                          • Move Bend Properties into Inspector
                                                                          • Make the appearance of Layout Break Inspector consistent with other inspectors
                                                                          • Add "Properties" button to several inspectors
                                                                          • Update basic MuseScore colours to meet the accessibility requirements
                                                                          • Ask user for a name of the newly created custom palette
                                                                          • #297894: Palette Names as Search Results in Palette Search
                                                                          • #280393: Hairpin: when in Edit mode, pressing the SHIFT button causes handles to drop down
                                                                          • #297425: Dragging multiple selected elements
                                                                          • #298196: [Reg. 3.3.2 -> 3.3.3] Bar line edit mode is drawn incorrectly after dragging a handle
                                                                          • #291177: Improve "Generate" (formerly "New All") and other Parts dialog box buttons
                                                                          • #291569: Navigator remains in page view after switching to continuous view
                                                                          • #291957: Program window height changes according to components displayed: can cause mixer, piano to disappear off screen

                                                                          Commands/Properties

                                                                          • Y Offset value of fretboards didn't restore after undoing the values being changed from Edit Mode
                                                                          • Drag only elements of the same type in range selection
                                                                          • #298115: Replacing a note with an accidental leaves accidental on new note
                                                                          • #283653: Increase maximum value for frame radius in Inspector for text elements
                                                                          • #298121: Adding Intervals (above/below) should take into consideration the accidental toggle state
                                                                          • #297738: "Generate key signatures" in staff type change does not work
                                                                          • #296329: Instrument change should be able to apply to multimeasure rest
                                                                          • #279179: Natural-sharp/natural-flat not recognized as same accidental as sharp/flat
                                                                          • #296345: Text Style dlg box: offset suffix is always "sp" also for "mm" values
                                                                          • #297883: Multiple chord symbols attached to same note do not copy as part of range
                                                                          • #281253: Staff spacer down doesn't work at page bottom
                                                                          • #52151: "Auto" beam setting for Rests should not beam (if no stemlets)
                                                                          • #281957: Regression: display of beam properties for a selected note
                                                                          • #296044: Capture tool images are different in size compared to original
                                                                          • #298362: Pressing number after mouse click works for a different line in "Italian" styled tablature staff
                                                                          • #270589: "Bend type" does not remember previous user selection

                                                                          Corruptions and/or loss of data, crashes

                                                                          • Fix a crash on removing HBox from a score
                                                                          • #298910: Updating translations without a score open leads to crash
                                                                          • #298490: Musescore crashes when trying to open a specifc score
                                                                          • #298471: Fret diagram: strings with no X or O display as ? on Linux
                                                                          • #297454: Corruption in local time signature

                                                                          Accessibility

                                                                          • Improve speech for chordrests with spanners
                                                                          • #293301: Add accessibility command to force full read of current location

                                                                          Plugins

                                                                          • Update and add 1.x plugin documentation pages to Doxygen-based docs

                                                                          MusicXML Export/Import

                                                                          • #298552: [MusicXML] use offset for non-spanning directions

                                                                          Miscellaneous

                                                                          • Make extension file size suffixes translatable
                                                                          • Update appdata with latest releases
                                                                          • Correct whitespace representation in script tests to follow XML convention
                                                                          • Adjust Horns names
                                                                          • Add B-flat Trumpet to Orchestra genre, delete Piccolo Trumpet in B-flat from Orchestra and Concert Band genres
                                                                          • Disable "Generate key signatures" button for staff type change applied to tablature staff
                                                                          • #292912: File dialogs bookmarks are not saved and mess other applications bookmarks
                                                                          • #297549: Error in Select>More... menu
                                                                          • #295895: Language list in Resource Manager sorted by size is sorted in the style of string rather than that of number
                                                                          • #283240: Style menu: remember last selected dialog?
                                                                          • #297329: Add a Straight (tempo) text to the master palette
                                                                          • #293363: Enter should emplace ornament/element from Master Palette

                                                                          Release notes for MuseScore 3.3.x

                                                                          (Release notes for MuseScore 3.3.1 (November 13, 2019)

                                                                          Release notes for MuseScore 3.3.4 (December 4, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.4.24412, Windows 7+ (32 and 64-bit): 3.3.4.9066, AppImage: 3.3.4. (revision: 7684abe) 2019-12-04 https://musescore.org/en/3.3.4

                                                                          Fixes

                                                                          • Palette names were scrambled and nearly impossible to read (Windows 7)
                                                                          • Scale of palette was incorrect for high and low DPI displays
                                                                          • Courtesy accidentals disappeared after an octave change using Ctrl(Cmd)+Up/Down
                                                                          • Crash reports could not be sent

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          • Plugin API: allow Cursor.addNote() add a note to existing chord
                                                                          • Plugin API: add Cursor.prev() function
                                                                          • #297957: Ties extended in region after time signature change
                                                                          • #297893: [MusicXML import] subtitle placed incorrectly
                                                                          • #297287: Scale of palette incorrect for high (or low) DPI displays
                                                                          • #292648: Courtesy accidentals disappear after an octave change using Ctrl + Up/Down
                                                                          • #296682: Palette names are scrambled and nearly impossible to read (Windows 7)
                                                                          • #298061: Crash on set as style operation if score ends with a frame
                                                                          • #297614: Resetting slur jumps to beginning of score
                                                                          • #297326: Crash on opening Musescore 2.x file that uses leading space setting on the initial clef
                                                                          • #291085: cursor.addNote doesn't update internal segment reference
                                                                          • #297688: MusicXML: problems with generated MusicXML when Title frame has a "Dedication" field
                                                                          • #297468: Critical bug - crashing and not able to read damaged file
                                                                          • #298061: Crash on set as style operation if score ends with a frame

                                                                          Release notes for MuseScore 3.3.3 (November 26, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.3.24345, Windows 7+ (32 and 64-bit): 3.3.3.8992, AppImage: 3.3.3. (revision: 57d770e) 2019-11-26 https://musescore.org/en/3.3.3

                                                                          Improvements

                                                                          • Tie button behaves as a toggle now
                                                                          • Enable changing notes duration if selecting note stem, hook or a range
                                                                          • Visual improvements for palettes
                                                                          • Mark notes that are out of instrument range with red or yellow color even when they are selected
                                                                          • Save Online is now fully synchronised with the musescore.com upload page

                                                                          Fixes

                                                                          • Export Pdf on Mac with Muse Jazz Text was garbled and unreadable if no printers were setup on a machine
                                                                          • Entering notes with mouse failed in Italian TAB
                                                                          • Scoreview jumped back to start of score during note input on (auto)save
                                                                          • Sticking could not be copy-pasted
                                                                          • Extensions could not be installed on macOS Catalina

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Layout and automatic placement

                                                                          • #296610: Import from 2.3.2 may create useless user text style "Figured bass"
                                                                          • #166116: Slurs terminate in wrong spot in voices other than 1
                                                                          • #291053: Bad key change after undoing the enabling of multimeasure rests

                                                                          UI/UX

                                                                          • Better visual highlighting style of the tours
                                                                          • Make "Tie" button icon more clear
                                                                          • Improve the tie button logic when out of note input mode (toggle behaviour)
                                                                          • Enable changing notes duration if selecting note stem, hook or a range
                                                                          • Always show palette cell when dragging it to a score
                                                                          • Visual adjustments for palettes
                                                                          • Adjust double-click value for mixer sliders
                                                                          • Mark notes that are out of instrument range with red or yellow color even when they are selected. Previously only non-selected notes were marked if going out of instrument range.
                                                                          • #294613: [3.3beta-3.3beta2] There is a jumping effect on the palettes menu when you scroll with the mouse wheel.
                                                                          • #293906: Adding new "Upload" options to "Save Online"

                                                                          Commands/Properties

                                                                          • #297477: Apply alla breve to 4/4 changes to 2/2 instead
                                                                          • #279563: [MacOS X] Export Pdf with Muse Jazz Text all garbled and unreadable if no printers are setup on a machine
                                                                          • #288019: Feature: Change default behavior when pasting tuplet
                                                                          • #276511: Entering notes with mouse fails in Italian TAB
                                                                          • #297514: Cannot copy and paste stickings
                                                                          • #52906: Can't paste lyrics into tuplet
                                                                          • #279990: Can't paste text into tuplet
                                                                          • #296363: Accidental shortcuts do not work in Re-Pitch mode
                                                                          • #297008: Note-Entry, non-uniform behavior depending on selected element type
                                                                          • #291901: Play panel and Synthesizer: double-clicking the master fader resets Master Volume to wrong level (-20db)
                                                                          • #293459: Tie command does not properly handle chords with unisons
                                                                          • #296415: Settings in the inspector that are supposed to be greyed out don't appear as such upon the next click on the element
                                                                          • #289254: Beams in edit mode: issues with the adjustment of handles
                                                                          • #288618: Unchecking 'Play' property of an accent has no effect

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #297152: Crash on Ctrl+Shift+drag of score element on Linux (under ChromeOS)
                                                                          • #297428: Crash when Copy Standard or TAB staff measure and paste it to TAB staff if which contains slur
                                                                          • #296591: Pasting two voices on multimeasure rests leads to crash
                                                                          • #296034: Crash when multi-measure rests are enabled and press End

                                                                          Plugins

                                                                          • Use autoplace for notenames plugin's staff text
                                                                          • #295465: Editing parts from plugins
                                                                          • #292474: Ambitus crash in plugins

                                                                          Accessibility

                                                                          • add palette search and missing accessibility shortcuts
                                                                          • #296362: Screenreader info for RNA not good
                                                                          • #296416: Context menus not accessible (partly fixed)

                                                                          MusicXML Import/Export

                                                                          • #19244: [MusicXML import] reversed wedge not imported

                                                                          Miscellaneous

                                                                          • Remove "Choose your workspace" page from Startup Wizard
                                                                          • Add missing shortcuts of Mac and AZERTY keyboards
                                                                          • #296452: Extensions not Installing in Musescore 3.3 on macOS Catalina
                                                                          • #296203: Please add "pf" dynamic - per SMuFL glyph (U+E52E - dynamicPF)
                                                                          • #297626: 2/2, 3/2 and 4/2 have gotten lost from master timesig palette
                                                                          • #297544: Nested beams created
                                                                          • #296915: Dashed slurs on palette
                                                                          • #279024: Double click on Mixer's and Play Panel's dial and sliders should reset them to their defaults
                                                                          • #291453: PlayPanel dB value not updated when master volume changed in mixer
                                                                          • #291724: Percussive organ plays Ab2 and A2 wrong

                                                                          Release notes for MuseScore 3.3.2 (November 14, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.2.24203, Windows 7+ (32 and 64-bit): 3.3.2.8849, AppImage: 3.3.2. (revision: 492d7ef) 2019-11-14 https://musescore.org/en/3.3.2

                                                                          Fixes

                                                                          • MuseScore crashed on startup in some cases on Windows 7
                                                                          • "Save online" failed in some cases
                                                                          • Palettes were incorrectly placed when using multiple HighDPI monitors and scaling
                                                                          • Palettes disappeared on Ubuntu 18.04 in some cases

                                                                          Complete list of issues resolved

                                                                          • #295348: [Musicxml Export] - Strange Missing Hairpins
                                                                          • Implement "Move soundfont To Top" button for Fluid/Zerberus synths GUI
                                                                          • #295944: Tuplet dialog does not default to style settings, and creates tuplets with bad property flags
                                                                          • #295898: Deleting a StaffTypeChange causes a crash in macOS
                                                                          • #283943: Changing time signature on glissando results in crash
                                                                          • #295176: [MusicXML] improve instrument change handling
                                                                          • #296298: Inspector: segment "Leading Space" input field topped at 10sp
                                                                          • #292079: Selecting a measure then applying grace notes causes crash
                                                                          • #295703: Slurs to grace notes disappear after inserting bars
                                                                          • #292343: Measure numbers restart from 1 after section break even if the corresponding property got disabled
                                                                          • #283628: Fermata "play" property does not work
                                                                          • Fix score editing with keyboard not working after closing dialogs on MacOS
                                                                          • Add the bbox property to PluginAPI::Element
                                                                          • #296154: Accessibility: Make palette tree a single Tab object
                                                                          • Downgrade Qt version on Windows to Qt 5.9.8 to avoid recent Qt regressions that prevent normal usage of MuseScore
                                                                          • Update Qt version on Linux AppImages to Qt 5.9.8 to avoid recent Qt regressions that prevent normal usage of MuseScore
                                                                          • #296566: Crash when adding glissandos between notes and rests/to a single note
                                                                          • #296995: Scoreview jumps back to start of score during note input on (auto)save
                                                                          • #296579: "Save online" doesn't work
                                                                          • #288662: Mouse wheel zoom sensitivity
                                                                          • #293998: Figured Bass Continuation Lines Disappearing
                                                                          • #296960: Percent sign cannot be entered into text

                                                                          Release notes for MuseScore 3.3 (October 31, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.0.24090, Windows 7+ (32 and 64-bit): 3.3.0.8737, AppImage: 3.3.0. (revision: 4761df6) 2019-10-31 https://musescore.org/en/3.3

                                                                          New

                                                                          • Complete palettes redesign
                                                                          • Note Input workflow improvements
                                                                          • Native support for Roman numeral analysis and Nashville notation

                                                                          Improvements

                                                                          • Chord Symbol Formatting not only for MuseJazz has been supported
                                                                          • Symbols can be attached to barlines
                                                                          • Multiple improvements to the Plugin API
                                                                          • Implement changing palette and palette cell properties on fly
                                                                          • Current workspace is automatically saved on each action that changes the workspace
                                                                          • Palettes and workspaces can be reset to the default state defined by the workspace you started customisations from
                                                                          • Improve algorithm for determining start point for note input
                                                                          • Move the viewport to show actual changes in the score if they are outside of the current view

                                                                          Fixes

                                                                          • NVDA screen reader didn't work
                                                                          • Various MusicXML Import/Export fixes
                                                                          • Various fixes for the playback of tied notes, muted voices and notes being edited in parts
                                                                          • Sticking was not linked between score and parts
                                                                          • The presence of fretboard diagrams prevented input of chord symbols in other staves
                                                                          • Loop playback was set incorrectly in parts
                                                                          • Shortcuts navigation across the palettes was broken
                                                                          • Palettes and palette cells were not translated
                                                                          • It was impossible to enter successive sticking elements

                                                                          Complete list of issues resolved

                                                                          • MuseScore 3.3 Beta release notes
                                                                          • MuseScore 3.3 Beta Update release notes
                                                                          • MuseScore 3.3 Release Candidate release notes
                                                                          • MuseScore 3.3 Release Candidate 2 release notes
                                                                          • MuseScore 3.3 Release Candidate 3 release notes
                                                                          • #296127: Can't use CMD+SHIFT+Drag to copy on Mac
                                                                          • #296171: fix triggerLayoutAll() for spanners
                                                                          • #296271: Crash by undoing/redoing in main score a copy-paste made in the parts

                                                                          Release notes for MuseScore 3.3 Release Candidate 3 (October 26, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.0.24030, Windows 7+ (32 and 64-bit): 3.3.0.8677, AppImage: 3.3.0. (revision: cf84ff0) 2019-10-26 https://musescore.org/en/3.3rc3

                                                                          Improvements

                                                                          • Improve algorithm for determining start point for note input
                                                                          • Simplify and improve usability of the Note Input Workflow
                                                                          • Move the viewport to show actual changes in the score if they are outside of the current view

                                                                          Fixes

                                                                          • Fix a couple of issues related to Roman Numerical Analysis

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          • #295957: Pedal line continuation text not saved in score file
                                                                          • #289908: Cannot apply italic or underline to glissando text
                                                                          • #296053: Improve algorithm for determining start point for note input
                                                                          • #295675: Support RNA without root
                                                                          • #295778: Incorrect handling of HTML escapes in chord symbols
                                                                          • #273256: Chord symbols: Anomalous entry from the "Special Characters" window
                                                                          • #273266: Special Characters: When open in text object, drag and drop is inconsistent
                                                                          • update Campania to 2.008
                                                                          • Simplified and improved usability of the Note Input Workflow
                                                                          • Improved performance of changing notes duration
                                                                          • Move ScoreView's viewport to show actual changes in the score if they are outside of the current view
                                                                          • Restore list and range selection on undoing commands if possible

                                                                          Release notes for MuseScore 3.3 Release Candidate 2 (October 22, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.0.23993, Windows 7+ (32 and 64-bit): 3.3.0.8640, AppImage: 3.3.0. (revision: 399151f) 2019-10-22 https://musescore.org/en/3.3rc2

                                                                          Improvements

                                                                          • Current workspace is automatically saved on each action that changes the workspace
                                                                          • Basic and Advanced workspaces are automatically marked as "edited" if you customise palettes or toolbars
                                                                          • Palettes and workspaces can be reset to the default state defined by the workspace you started customisations from
                                                                          • Add time delay when dragging palette elements to avoid occasional moving palette cells

                                                                          Fixes

                                                                          • It was impossible to use keyboard with palettes on macOS if any additional window appears while working with the palettes
                                                                          • Filters (F6) for Lyrics and Chord Symbols were mixed up
                                                                          • Unable to consequently insert symbols from a palette in text editing mode
                                                                          • Lyrics Y offset in parts was lost on save/reload
                                                                          • It was impossible to enter successive sticking elements
                                                                          • MuseScore crashed when undoing adding an instrument in continuous view
                                                                          • Delete confirmation appeared several times when deleting multiple cells

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Layout and automatic placement

                                                                          • #286185: bends above the staff drawn incorrectly

                                                                          UI/UX

                                                                          • #295202: Filters (F6) for Lyrics and Chord Symbols are mixed up in 3.3 RC
                                                                          • Add a time delay for reordering palette elements with drag-and-drop. This should prevent reordering palette items by accident when dragging palette element to a score.
                                                                          • Fix showing a placeholder when adding a custom item to a palette
                                                                          • #295260: ensure focus on a scoreview after inserting symbols from a palette in text editing mode
                                                                          • Fix hidden custom cells being shown incorrectly in some workspaces
                                                                          • Make "Reset Palette" action reset to a state stored in the source workspace file
                                                                          • Make restored palettes appear at the top of palettes list
                                                                          • Rework workspaces editing workflow. Workspaces are saved automatically after each change (prevents possible loss of data). Read-only workspaces are automatically saved to different location with "edited" suffix. Edited versions of Basic and Advanced workspace hide the default ones in the workspaces list.
                                                                          • #295351: fix inability to return focus to QML palettes in some cases

                                                                          Commands/Properties

                                                                          • #290947: Lyrics: frame, border and highlight styling regressions
                                                                          • #295357: lyrics Y offset in parts lost on save/reload
                                                                          • #279964: bend font not connected to style
                                                                          • #286188: text on prebend misplaced
                                                                          • #295531: unable to enter successive sticking elements
                                                                          • #292830: fix copying lyrics to clipboard
                                                                          • #295153: minimum distance property for all kinds of fermata is not saved

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #295224: end-start-repeat crashes in timeline
                                                                          • Fix a crash on reading a workspace with non-existing preferences. This should prevent issues like #295238 from happening in future in case new settings get introduced to MuseScore
                                                                          • Fix losing workspace on renaming
                                                                          • #295792: fix a crash on changing duration of multiple notes in some situations
                                                                          • #295842: fix a crash on launching MuseScore with -s option
                                                                          • #295881: fix a crash on undoing adding an instrument in continuous view

                                                                          Miscellaneous

                                                                          • Fix Delete key not working in "Custom" section of "More" popup
                                                                          • Try to return focus to palette after closing palette-related dialogs
                                                                          • Show delete confirmation only once when deleting multiple cells

                                                                          Release notes for MuseScore 3.3 Release Candidate (October 2, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.0.23833, Windows 7+ (32 and 64-bit): 3.3.0.8479, AppImage: 3.3.0. (revision: d3bff12) 2019-10-02 https://musescore.org/en/3.3rc

                                                                          New

                                                                          • Save Online is now fully synchronised with the musescore.com upload page

                                                                          Improvements

                                                                          • Implement changing palette and palette cell properties on fly
                                                                          • Visual style of the palettes

                                                                          Fixes

                                                                          • Loop playback was set incorrectly in parts
                                                                          • Shortcuts navigation across the palettes was broken
                                                                          • Changing workspaces when installing/removing extensions led to a crash
                                                                          • Palettes and palette cells were not translated
                                                                          • Save/Load palettes were not implemented

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #281866: Error with loop playback in parts with MuseScore 3

                                                                          Layout and automatic placement

                                                                          • #294580: Generate courtesy signature if next system has a local time signature on any staff
                                                                          • #283319: Time Signature disappears
                                                                          • #294866: The direction of beamed notes does not immediately change when the beam is broken
                                                                          • #294082: TAB - Mixing mensural value symbols and beaming in historic tablatures is broken

                                                                          UI/UX

                                                                          • Edit score properties in WebView on musescore.com upload
                                                                          • Miscellaneous UX and visual appearance fixes for palettes
                                                                          • Add a drop shadow effect to palette popups
                                                                          • Close "More" popup on clicking outside the popup or the parent palette
                                                                          • Fix black left/right arrow icons in dark theme

                                                                          Commands/Properties

                                                                          • Implement palette search shortcut for QML palettes
                                                                          • Mark palette cell custom if its properties are edited (except for name)
                                                                          • Implement changing palette and palette cell properties on fly
                                                                          • #66961: Shortcut to change tabs right to left needed, like Ctrl+Shift+Tab
                                                                          • #295069: Unsynced text content in lines between score and parts
                                                                          • #294054: Enable direction change in stem's inspector UI
                                                                          • #257581: Changes to Measure properties are not propagated between score and existing linked parts
                                                                          • #294728: Lines: Minimum distance is not saved with score unless it is part of the style
                                                                          • #295107: Navigation shuts down after the last note of a score
                                                                          • #293429: Tuplet Font Size not saved/loaded from file
                                                                          • Implement Save/Load for the new palettes
                                                                          • Grey out palettes when they are disabled
                                                                          • Guess the best match when opening the custom palette's "More" pop-up

                                                                          Corruptions and/or loss of data, crashes

                                                                          • fix crash on changing workspaces when installing/removing extensions
                                                                          • #295106: Crash on next/prev element for certain elements attached to other elements
                                                                          • #293318: Copying Grace Notes onto Grace Notes results in Crash
                                                                          • #294727: Easy fingering mode: pressing [Space] causes crash in staff/tablature if notes are in Voice 4 in bottom staff of score
                                                                          • #280830: Time signature replacement crashes if double-clicking first on it

                                                                          Accessibility

                                                                          • #294677: Screenreader does not read subsequent consecutive frames
                                                                          • #294485: Previous/next element commands should not wrap around begin/end of score
                                                                          • #293228: No screenreader feedback on palette search
                                                                          • #293229: Screenreader does not read name of score on tab change
                                                                          • #294121: Next/previous element skips staff texts entered out of order
                                                                          • #294126: Cannot navigate to repeat text (measure elements)

                                                                          MusicXML Import/Export

                                                                          • #294174: [MusicXML export] invalid export element credit is missing child element
                                                                          • #280608: Musicxml Export - Composite Dynamic expressions export different garbage codes
                                                                          • #293964: [Musicxml export] - Trill accidentals not exported
                                                                          • #281593: [MusicXML export] Feather beams are not exported to musicxml

                                                                          Plugin API

                                                                          • #294910: Plugin API: setting properties before adding an element to a score may work incorrectly
                                                                          • #293837: An approach is needed to identify unique MuseScore objects from within the PluginAPI
                                                                          • #251436: Can't easily add Lyrics in Plugins
                                                                          • Add experimental feature to notify plugins on score changes

                                                                          Miscellaneous

                                                                          • Display translated names in Palette/Palette Cell Properties
                                                                          • Add "Reload QML code" debug shortcut (reloads changed QML files on the fly)
                                                                          • Adapt test scripts framework to the redesigned palettes
                                                                          • #294076: Please add Carillon instrument
                                                                          • #280540: Tool tips in the palettes of both workspaces and the master palettes are not translated
                                                                          • #280728: Most tooltips in palettes (Basic/Advanced/Master) don't show translated
                                                                          • #110386: Shortcuts not working for sub-beaming 16th and 32nd notes
                                                                          • #295065: Professional lowest pitch for contrabasses should be C1 rather than E1
                                                                          • #295121: 3.3 Beta /Mac: clicking "OK" in color dialog puts mouse in drag-mode, ESC doesn't fix it

                                                                          Release notes for MuseScore 3.3 Beta Update (September 17, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.0.23686, Windows 7+ (32 and 64-bit): 3.3.0.8331, AppImage: 3.3.0. (revision: b45221c) 2019-09-17 https://musescore.org/en/3.3beta2

                                                                          Improvements

                                                                          • Various accessibility improvements
                                                                            • Made more elements available for screen readers
                                                                            • Improved the information interpreted by screen readers

                                                                          Fixes

                                                                          • "Single palette" option was not implemented
                                                                          • Palettes appearance was broken and wasn't aligned with the MuseScore styling
                                                                          • Dark theme was not correctly supported in new palettes
                                                                          • Note value repeat section: setting "Never" was broken
                                                                          • Undo didn't restore a deleted frame
                                                                          • NVDA screen reader didn't work

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Layout and automatic placement

                                                                          • #288169: Line drawing does not work when 90 degree T hooks are combined with another hook.
                                                                          • #294297: Cross-Measure Beam Custom Position Not Restored

                                                                          UI/UX

                                                                          • "Single palette" option was not implemented
                                                                          • Palettes appearance was broken and wasn't aligned with the MuseScore styling
                                                                          • Dark theme was not correctly supported in new palettes

                                                                          Commands/Properties

                                                                          • #293897: [Tablature] Note value repeat section: setting "Never" broken
                                                                          • #293707: UNDO does not restore a deleted frame
                                                                          • #289374: Tuplet numbers: Follow staff size not working

                                                                          Corruptions and/or loss of data, crashes

                                                                          • Fix crash related to new palettes initialisation. The crash occasionally happened when running MuseScore 3.3 Beta.
                                                                          • #291969: Crash on load of score with staff type change on measure 1
                                                                          • #293894: Crash on next-element when editing fingering with user text style
                                                                          • #294120: Insert measures in mmrest mode leads to corruption/crash
                                                                          • #294156: Incorrect segment type for fermata
                                                                          • #294010: Hanging on startup

                                                                          Accessibility

                                                                          • #292510: Accessibility navigation skips frames
                                                                          • #293671: Screenreader should read staff name in addition to number
                                                                          • #293169: Screenreader fails to read accidentals in key signatures and notes without explicit accidental
                                                                          • #293300: Optimize screenreader info information during score navigation
                                                                          • #292928: Scrolling among staves with keyboard shortcut
                                                                          • #293971: I cannot use tempo marking in NVDA
                                                                          • #294237: Accessibility: don't read staff text and other extra info for each note of chord

                                                                          Miscellaneous

                                                                          • Update Qt version for Windows builds to Qt 5.12.5
                                                                          • #294125: Tooltip / screenreader feedback for "space" on Special Characters palette is noteLongaSquareDown
                                                                          • #294006: Symphony Orchestra template has wrong patch for pizzicato
                                                                          • #293981: double ampersand in palette names

                                                                          Release notes for MuseScore 3.3 Beta (August 31, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.3.0.23559, Windows 7+ (32 and 64-bit): 3.3.0.8205, AppImage: 3.3.0. (revision: f94c2734) 2019-08-31 https://musescore.org/en/3.3beta

                                                                          New

                                                                          • Add support for Roman numeral analysis & Nashville notation
                                                                          • Complete redesign of the Palettes panel

                                                                          Improvements

                                                                          • Implement adding symbols to barlines
                                                                          • Play Panel layout
                                                                          • In Edit mode, keyboard arrows now change horizontal offset rather than leading space
                                                                          • Multiple accessibility improvements
                                                                          • Multiple improvements to the Plugin API
                                                                          • Make use of the existing accordion palette

                                                                          Fixes

                                                                          • Various fixes for the playback of tied notes, muted voices and notes being edited in parts
                                                                          • Sticking was not linked between score and parts
                                                                          • Note symbols were truncated in Tab Preview
                                                                          • Some Buttons looked grayed-out in dark mode
                                                                          • The presence of fretboard diagrams prevented input of chord symbols in other staves
                                                                          • Removing a custom workspace caused a crash
                                                                          • Multiple fixes for MusicXML Export/Import
                                                                          • Letter score in landscape orientation exported as A4 in score+parts PDF

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #282165: Mute voice produces note that doesn't stop when overlap present
                                                                          • #291146: Swing prevents midi rendering of tied notes
                                                                          • #293733: If note is tied to preceding grace note of equal pitch, only the grace note is played back
                                                                          • #292851: Note still played after having been deleted.

                                                                          Layout and automatic placement

                                                                          • #291932: Copy-paste breaths & pauses causes bad layout of the first note/rest in following measures
                                                                          • #292960: Hairpin with dynamics at the end is too short
                                                                          • #287871: Volta on bar ending in start repeat displayed with no line after adding break
                                                                          • #290011: [Tablature] Note value repeat section: "At new system" renders the same as "At new measure"
                                                                          • #292087: Stickings are not linked between score and parts
                                                                          • #290061: Not enough space between Time signature and clef change
                                                                          • #289765: Continuous view: Key change forces double barline

                                                                          UI/UX

                                                                          • #291886: Some Buttons look grayed-out in dark mode
                                                                          • #147031: Note symbols are truncated in Tab Preview
                                                                          • #293464: Slash style for staff type change: Inspector label and function are not the same
                                                                          • #291431: Incorrect drop anchor displayed while dragging a Volta
                                                                          • #292571: In dark theme toolTips in Inspector are basically unreadable
                                                                          • #285479: Keyboard nav issues
                                                                          • #290700: 3.1.0.7078 Unexpected change of "Play Panel" layout?
                                                                          • #291233: Make the color of invalid/disabled options in the menus more distinguishable
                                                                          • Fix dock plugins appearing with zero height

                                                                          Commands/Properties

                                                                          • #287245: Add symbols to barlines
                                                                          • #38941: Staff texts after the first are ignored in multimeasure rests
                                                                          • #291941: Changing spacer length with a mouse is not undoable
                                                                          • #293531: clef and key are erroneously shown further (in lead sheet style), althoug I didn't check 'create clef/key on every staff'
                                                                          • #292024: The presence of fretboard diagrams prevents input of chord symbols in other staves
                                                                          • #290493: Ottava begin and continue text cannot be saved as independent style settings
                                                                          • #224451: Mismatch between "To Coda" and "Fine" when the first is deleted before enable mmrests
                                                                          • #293599: Acessing to Coda, Segno elements
                                                                          • #283360: “Rest’s Augmentation dot” are not applied to TAB’s rests
                                                                          • #292583: the color for styled settings in Inspector can't get configured
                                                                          • #165621: Tremolo between 2 notes is copied even if unchecked in selection filter
                                                                          • #290047: In Edit mode, keyboard arrows now change leading space rather than horizontal offset
                                                                          • #88861: Option for editing abbreviated staff names in instrument changes
                                                                          • #290136: Add 'Style...' to property menu for all possible elements
                                                                          • #291261: Make volta mouse drops apply only to first staff by default, unless user holds control to drop to a specific staff
                                                                          • #293311: changing Part Properties changes violin patch in the mixer
                                                                          • Add style settings for chord symbol formatting

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #292883: Using the "Repeat selection" shortcut to notes within a tuplet crashes Musescore.
                                                                          • #293460: Crash when loading file with orphan Segment tags
                                                                          • #290929: crash with negative number of dots for rests
                                                                          • #276084: Importing old .ove file makes MuseScore crash
                                                                          • #291986: Removing a custom workspace causes crash
                                                                          • #287475: Crash on open MusicXML file lacking time signature
                                                                          • #279828: MusicXML import - attempting to fix badly read triplets causes crash
                                                                          • #291698: Crash in a score with tremolo in invisible staff in multi-measure rest
                                                                          • #287699: the setting of "View > Mark irregular measures" isn't saved into scores
                                                                          • #292310: Crash when adjusting Absolute Velocity in piano roll editor
                                                                          • #292312: Crash press ‘space bar’ in entering fingering mode on TAB stave when note is tied beyond barline
                                                                          • #293894: Crash on next-element when editing fingering with user text style

                                                                          Accessibility

                                                                          • #284203: Accessibility: Next Element loses position after Delete
                                                                          • #284287: Staff / Part properties: Tab order broken
                                                                          • #283463: Accessibility: speech no longer reports articulations and ornaments
                                                                          • #281448: Accessibility: Next Element and Previous Element shortcuts ignore articulations
                                                                          • #292269: Alt+left/right should remember last selection
                                                                          • #282091: Fingerings disturb navigation with accessibility shortcuts in multi-voices context

                                                                          Plugins

                                                                          • #292900: Expose Element.posX & Element.posY values to plugins
                                                                          • #293008: Expose tie information read-only to QML plugins
                                                                          • #72416: Plug-in code working differently when called directly and when run under Plugin Creator
                                                                          • #275268: MuseScore Plugins_Plugin Manager Listings - Every QML file listed even if it cannot be executed as a plugin.
                                                                          • #267604: Possibility for plugin to delete elements
                                                                          • #291708: Can a plugin access on-time/off-time?
                                                                          • #291790: Port the add/remove functions that exist on the Chord cpp end into the 3.x Plugin API wrapper
                                                                          • Expose Ms:Align enum to plugins
                                                                          • Remove the (not functional) Plugins menu from the menu bar…
                                                                          • Fix build without plugins (Qt 5.7, Debian stretch)

                                                                          MusicXML Export/Import

                                                                          • #292927: [MusicXML export] non-arpeggiate creates invalid XML export
                                                                          • #292461: [Musicxml Export] - Measure numbering not correct
                                                                          • #271505: Allow user to set mode along with key signature
                                                                          • #293751: [MusicXML export] missing print new-system after section break
                                                                          • #291761: [Musicxml Export] - endText of a textline doesn't export
                                                                          • #281591: Mid-measure barlines are not exported to musicxml
                                                                          • #281592: Trills not exported properly to musicxml
                                                                          • Prevent incorrect MusicXML export for ottavas (similar to #292927)
                                                                          • Fix spurious 'direction type Fermata at tick ... not implemented' error on MusicXML export

                                                                          Miscellaneous

                                                                          • #290323: 3.1 always saves to the <Synthesizer> tag... appending full info on every save
                                                                          • #291991: "Mixer" in menus bar context menu shows untranslated
                                                                          • #291992: "Play Panel" is untranslated
                                                                          • #272546: Baritone Oboe should be named Bass Oboe in English
                                                                          • #289957: A Translation String doesn't show
                                                                          • #291079: "Save online" fails in Windows, when building with Qt 5.12.4
                                                                          • #291646: If detach inspector palette after factory reset before inspector tour was initiated, then stuck in infinite loop
                                                                          • #290659: Instrument tip in mixer shows &amp; instead of &
                                                                          • #293242: Make Tremolo string translatable and plural
                                                                          • #291756: fluid synth's sample pitchadj signed char value incorrectly read on ARM cpus, causing incorrectly-pitched synthesis
                                                                          • #286666: Error message when no note selected untranslatable
                                                                          • #291791: Letter score in landscape orientation exported as A4 in score+parts PDF
                                                                          • #291292: Add 3/2 time signature to advanced workspace and master palette
                                                                          • #293877: Adding or dragging spacers causes a full re-layout
                                                                          • #288600: -R option deletes user preferences
                                                                          • Make use of the existing accordion palette
                                                                          • Add musescore-specific vscode editor settings for linux
                                                                          • Remove superfluos duplicate and unnamed channel from acoustic bass
                                                                          • Make "Show More" toolTip translatable
                                                                          • Change "Patch" to "Sound"
                                                                          • Add mute channel to Guitar solo templates
                                                                          • Fix Horns' names, add low horn in C treble clef
                                                                          • Document -F and -R settings better, partially addresses #288600
                                                                          • Flat and natural entered in text mode via shortcuts are too small
                                                                          • Add "Chinese (Hong Kong)" language
                                                                          • Allow unicode flat and sharp as input for chord symbols
                                                                          • Compile fix for new portmidi versions

                                                                          Release notes for MuseScore 3.2.x

                                                                          Release notes for MuseScore 3.2.3 (July 8, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.10+: 3.2.3.22971, Windows 7+ (32 and 64-bit): 3.2.3.7635, AppImage: 3.2.3. (revision: d2d863f) 2019-07-08 https://musescore.org/en/3.2.3

                                                                          Fixes

                                                                          • Articulations didn't play properly in MDL instruments
                                                                          • Tuplets layout was broken in some cases
                                                                          • Fingering jumped unpredictably in some cases
                                                                          • Score_and_Parts pdfs were garbled when using MuzeJazz font on macOS
                                                                          • Switching between workspaces erased the enabled plugins

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #291104: Fix articulations not playing properly in MDL instruments

                                                                          Layout and automatic placement

                                                                          • #291491: Support tuplets in rebaseMinDistance

                                                                          UI/UX

                                                                          • #290058: Translate palette drag painter coords

                                                                          Commands/Properties

                                                                          • #291287: Fingering jumps on drag

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #290546: Corruption on copy/paste end final mmrest
                                                                          • #279563 and #283560: Score_And_Parts pdfs are garbled when using MuzeJazz font on macOS

                                                                          Plugins

                                                                          • #291512: Fix enumerations objects not available in qml with Qt 5.12.4
                                                                          • #291583: Switching between workspaces erases the enabled plugins
                                                                          • #291460: Plugins disappeared
                                                                          • #286727: Empty entries Menu Bar under Plug-Ins

                                                                          Miscellaneous

                                                                          • #291370: Incorrect filenames in /share/sound/CMakeLists.txt prevent installation
                                                                          • #291791: Letter score in landscape orientation exported as A4 in score+parts PDF
                                                                          • Packages for macOS now support 10.10+ versions (Qt version is Qt 5.9.8)

                                                                          Release notes for MuseScore 3.2.2 (June 30, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.2.2.22888, Windows 7+ 64-bit: 3.2.2.7534, Windows 7+ 32-bit: 3.2.2.7534, AppImage: 3.2.2. (revision: c893c61) 2019-06-30 https://musescore.org/en/3.2.2

                                                                          Fixes

                                                                          • Significant performance drop on macOS 10.14+ machines
                                                                          • The Menu Bar entries under Plug-Ins were empty

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Performance

                                                                          • #291482: Latest update (June 28) is very problematic

                                                                          Plugins

                                                                          • #291460: Plugins disappeared
                                                                          • #286727: Empty entries Menu Bar under Plug-Ins

                                                                          Release notes for MuseScore 3.2.1 (June 28, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.2.1.22851, macOS 10.10/11: 3.2.1.22851, Windows 7+ 64-bit: 3.2.1.7498, Windows 7+ 32-bit: 3.2.1.7498, AppImage: 3.2.1. (revision: 59a887d) 2019-06-28 https://musescore.org/en/3.2.1

                                                                          New

                                                                          • Official builds for macOS 10.10 and 10.11 are now available
                                                                          • Some more APIs for plugins

                                                                          Fixes

                                                                          • Sticking was lost on reloading scores
                                                                          • The position data of articulations (above, below) was lost after saving
                                                                          • Empty score crashed when playing in some cases

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Commands/Properties

                                                                          • #291335: The position data of articulations (above, below) lost after saving
                                                                          • #291374: Stickings do not save after PC restart
                                                                          • #291396: Sticking is deleted upon saving and re-opening a file
                                                                          • #291426: Arrow icons inversed in staff properties dialog
                                                                          • #291378: Stay on same staff when entering stickings
                                                                          • #281362: Allow shift+drag to rearrange palette

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #291342: Crash on playing an empty score
                                                                          • #291051: Crash on redo after deleting a key signature
                                                                          • Fix a crash on exporting PDF/PNG with parts from some scores

                                                                          Miscellaneous

                                                                          • Plugins: Expose the NoteType enum and Chord/Note.noteType properties.
                                                                          • Plugins: Add remainder of v2.0 Part object properties to v3.2.1 (see fc305ed)

                                                                          Release notes for MuseScore 3.2 (June 25, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.2.0.22758, Windows 7+ 64-bit: 3.2.0.7410, Windows 7+ 32-bit: 3.2.0.7410, AppImage: 3.2.0. (revision: 8594c8c3) 2019-06-25 https://musescore.org/en/3.2

                                                                          New

                                                                          • Default to dark theme on macOS if Dark Mode (available as of 10.14 Mojave) is the system-wide preference
                                                                          • Sticking (the process of assigning certain notes to either our left or right hand) as a new command

                                                                          Improvements

                                                                          • Make basic colors of the application including voice colors consistent
                                                                          • 7/8 time signature was added to advanced workspace and master palette
                                                                          • Avoid poor alignment of hairpins to dynamics bound to the segment before hairpin start
                                                                          • Add style settings allowing MDL templates to follow basic drum line notation rules better
                                                                          • Double/triple-clicking in a text editing mode now selects a word/paragraph respectively

                                                                          Fixes

                                                                          • Playback tempo was incorrect when working in continuous view
                                                                          • Playback tempo set to defaults in some cases when editing score elements
                                                                          • Tempo changes set fermata time stretch to defaults
                                                                          • Tuplets and articulations were laid out incorrectly
                                                                          • Layout shift in a measure at start of a system happened in some cases
                                                                          • Multi-measure rests created unexpected key signatures in some cases
                                                                          • Key signature appeared in multi measure rest after being deleted from underlying measure
                                                                          • Side panels were not dockable after being undocked and closed once
                                                                          • Mixer panel disappeared in some cases
                                                                          • Mixer didn't remember changes in the channels
                                                                          • Changing clef didn't have an effect in combination with multi measure rest
                                                                          • Сopying/pasting a clef into an another clef crashed Musescore
                                                                          • Right-click / Edit Element with a different element selected led to crash
                                                                          • Exporting parts from a score didn't produce correct MIDI, MP3, WAV, OGG, and FLAC files.

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #287000: Playback speed is incorrect when selecting a continuous view for a part
                                                                          • #289916: Dynamics with zero velocity make playback play with almost no velocity
                                                                          • #289922: Playback tempo becomes incorrect if editing score in continuous view
                                                                          • #290997: Incorrect tempo after tempo edits in presence of fermata with time stretch enabled
                                                                          • #290429: Update ensemble strings instruments to select correct presets
                                                                          • #291249: Edits done to a part are not reflected in playback

                                                                          Layout and automatic placement

                                                                          • Fix wrong skyline for beams if their creation made stems shorter
                                                                          • Enable autoplacement for non-cross-staff tuplets, place them above articulations
                                                                          • #290053: Adding articulation causes full relayout
                                                                          • #290827: Impossible to create a double/dotted/dashed/final barline at the right end of a mutli-measure rest bar
                                                                          • #289933: Layout shift in measure at start of system
                                                                          • #290326: Clef changes at repeats
                                                                          • #286616: Multi-measure rests creates unexpected key signatures
                                                                          • #290210: Bad layout of pages >1 after edit
                                                                          • #289703: Hairpin should not extend across barline when it contains its own dynamic marking
                                                                          • #289982: Notes on staff with no/narrow key signature can overlap key signature on other staves
                                                                          • #284481: Automatic placement of single rests in multiple voice areas
                                                                          • #287432: Key signature appears in multimeasure rest after being deleted from underlying measure
                                                                          • #289877: Fingering affects layout with autoplace disabled
                                                                          • #279770: Lyrics align is wrong on lyrics containing numbers and space
                                                                          • #289892: Bad layout of mmrest at start of system
                                                                          • #288508: Bad layout of lines (text line, trill line...) before start repeat
                                                                          • #22882: Ledger line elongates when note is made small in chord
                                                                          • #21131: Ledger lines for mix of small- and full-sized notes on same stem sized incorrectly

                                                                          UI/UX

                                                                          • Default to dark theme on macOS if Dark Mode (available as of 10.14 Mojave) is the system-wide preference
                                                                          • Improved icons on dark theme and dark theme style in general
                                                                          • Added buttons colors to the advanced preferences
                                                                          • Changed basic colors of the application including voice colors
                                                                          • Updated Musescore logo
                                                                          • Added 7/8 time signature to advanced workspace and master palette
                                                                          • Concert Pitch - fix styling to highlight blue like icon when ON
                                                                          • #287528: Side panels not dockable after being undocked and closed once
                                                                          • #290019: Piano keyboard display does not update when changing note by using arrow keys.
                                                                          • #289773: Mixer changes width of inspector when undocked.
                                                                          • #283258: Mixer panel (not) showing
                                                                          • #291089: Leaving edit mode requires second click
                                                                          • #289957: Arpeggios & Glissandi palette name doesn't show translated

                                                                          Commands/Properties

                                                                          • Sticking ('fingering' for drummers) as a new command
                                                                          • Add style settings for articulations placement
                                                                          • Avoid bad aligning of hairpins to dynamics bound to the segment before hairpin start
                                                                          • Implement styleable tremolo placement property, add it to Inspector
                                                                          • Implement tremolo placement at stem center
                                                                          • Add 'copy with link to score' command to foto mode
                                                                          • #281096: Navigator not memorizing multiple score positions
                                                                          • #287520: Glissando with anchor change via Shift+Down lost on save/reload
                                                                          • #289581: Fermatas: In imported 2.x files, the fermata in voice 2 is reset to voice 1
                                                                          • #290040: Min distance setting not saved for text lines.
                                                                          • #290121: After selecting sine wave in the Mixer, saving, and reopening, it changes to saw lead
                                                                          • #290147: Mixer not remembering changes in the channels
                                                                          • #279117: Cannot add custom lines spacers to custom palette
                                                                          • #164571: 'Undo' does not remove instrument from mixer
                                                                          • #284002: Tablature: unexpected default behavior with tied fret mark and parenthesis
                                                                          • #290665: Changing clef has no effect in combination with multi measure rest
                                                                          • #75626: Cannot move tied note into another voice
                                                                          • #279416: Allow customization of minVerticalDistance (space between marking on adjacent staves/systems)

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #290187: Crash when copying/pasting a clef into an another clef
                                                                          • #289862: MuseScore 3.1 Note Input - Induced Crash
                                                                          • #280906: Crash if using "Fill with slashes" on mm rests
                                                                          • #290415: crash when moving a formerly cross-system-break tied note
                                                                          • #291061: Crash after undoing moving a tied note to another voice
                                                                          • #290967: Crash on right-click / Edit Element with a different element selected
                                                                          • #290094: Crash when modifying appoggiatura from imported MusicXml file

                                                                          Plugins

                                                                          • More APIs for the plugin framework
                                                                          • #289553: In plugin run.qml, QProcess "not a type" or "not installed".
                                                                          • #286707: Plugins cannot read scores array (not available) and curScore.name always delivers "Score"

                                                                          MusicXML

                                                                          • #289819: MusicXML export generates wrong measure length
                                                                          • #280607: MusicXML export - top texts don't export

                                                                          Miscellaneous

                                                                          • Added protection against the files with dots in the names
                                                                          • #290323: 3.1 always saves to the <Synthesizer> tag ... appending full info on every save
                                                                          • #289890: Exporting parts from a score does not produce correct MIDI, MP3, WAV, OGG, and FLAC files.
                                                                          • #10986: Double/triple-click text does not select word/paragraph
                                                                          • #290462: Fix Symphony Orchestra template

                                                                          Release notes for MuseScore 3.1.x

                                                                          Release notes for MuseScore 3.1 (May 28, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.1.0.22425, Windows 7+ 64-bit: 3.1.0.7078, Windows 7+ 32-bit: 3.1.0.7078, AppImage: 3.1.0. (revision: e26f7c46) 2019-05-28 https://musescore.org/en/3.1

                                                                          New

                                                                          • Single-note dynamics playback - long notes can play dynamic changes
                                                                          • Updated soundfont that supports single-note dynamics out of the box
                                                                          • High quality soundfont with better strings and synth instruments available as an extension in the Resource Manager
                                                                          • Option to completely disable Auto Placement
                                                                          • Elements can cross staves still participating in Auto Placement
                                                                          • Half-time/Double-time feature that shortens and lengthens rhythms on copy-pasting
                                                                          • Linearization feature that unrolls all repeats
                                                                          • Internal computational approach that allows creating 256th, 512th, 1024th notes and any kind of compound tuplets
                                                                          • Online documentation for Plugin API is available

                                                                          Improvements

                                                                          • Playback starts immediately on large scores
                                                                          • Continuous view performance was significantly improved
                                                                          • The layout of the scores imported from MuseScore 2 is now preserved
                                                                          • Size and usability of Play Panel is now improved
                                                                          • Add chord symbol support for fret diagrams
                                                                          • Move the whole segment on dragging a note in edit mode
                                                                          • Allow changing duration of multiple notes
                                                                          • Select notes after deleting various elements
                                                                          • Make copy-pasting hairpins possible
                                                                          • Fix significant lag on iterating over notes with left-right arrows
                                                                          • UI refinements including more streamlined Inspector
                                                                          • "MuseScore File" string (under File -> Save As...) now indicates which version you are about to save (MuseScore 3)

                                                                          Fixes

                                                                          • System positions calculations allocated too much space
                                                                          • Courtesy clefs and key signatures were positioned incorrectly around repeat barlines
                                                                          • Cross-staff notation was incorrect in some cases
                                                                          • Barlines spanning was wrong in some cases
                                                                          • Barlines were incorrect when small and standard staves were mixed
                                                                          • Piano keyboard display didn't update when adding accidental using toolbar or palette
                                                                          • Side panels became undockable after being undocked and closed once
                                                                          • Could not add proper slur to grace notes when there were more than one
                                                                          • Layout of small staves was incorrect in some cases
                                                                          • Key signatures displayed incorrectly after clef change
                                                                          • Grace notes (after) collided with accidentals on main note
                                                                          • Key signature disappeared in all but first stave
                                                                          • Note's dot's visibility was incorrect when toggling visibility with note and dot selected
                                                                          • Couldn't pan score while playing when a note was selected
                                                                          • Instrument Change didn't transpose
                                                                          • Couldn't delete clef change at the start of a system
                                                                          • Accent-staccato didn't work in default template
                                                                          • Some properties were not kept on saving score
                                                                          • Incorrect key/time signatures and clefs appeared in the score in specific cases
                                                                          • User-modified barlines were not linking correctly between staves of a score, parts, and multimeasure rests
                                                                          • Ties were laid out incorrectly in some cases
                                                                          • Problems with layout of with beams, slurs, tuplets, and tremolo in cross-staff notation
                                                                          • Sizes and positions of some elements were not scaling correctly for small staves
                                                                          • Brackets didn't appear after section break
                                                                          • Users were automatically logged out after 5 hours when using Save Online
                                                                          • Phrasing in target measure was not cleared on copy-pasting
                                                                          • ChordIdentifier Plugin didn't work with MuseScore 3

                                                                          Complete list of the fixed issues is available in the Beta, Beta Update and Release Candidate release notes:

                                                                          • MuseScore 3.1 Beta release notes
                                                                          • MuseScore 3.1 Beta Update release notes
                                                                          • MuseScore 3.1 Release Candidate release notes

                                                                          Plus these:

                                                                          • #63301: Comma as a shortcut won't get saved
                                                                          • #179251: Select all glissandi in Range Selection fails
                                                                          • #289513: Coloring glissandi: color visible in inspector, but not on screen
                                                                          • #289605: Bad layout of cross-staff ties that also cross system breaks
                                                                          • #289614: Bad layout of tie with clef change
                                                                          • #285688: Width of repeat measure keeps increasing
                                                                          • Make undo/redo changes mark score playlist as dirty

                                                                          Fixes for Regressions in 3.1 pre-release versions (as collected in #289565: [Epic] 3.1-RC Regressions that must be fixed):

                                                                          • #289773: Mixer changes width of inspector when undocked.
                                                                          • #289749: Fret diagrams disappear
                                                                          • #289721: Bug: Measure repeats ignored first time through
                                                                          • #289693: [Regression] Spacers start adding space between systems too soon
                                                                          • #289668: Press Ctrl+number (3,4,5,6) while entering chord mode cause crash
                                                                          • #289651: "Show courtesy" checkbox in clef Inspector does not work
                                                                          • #289616: Tie displayed incorrectly at start of system
                                                                          • #289562: Adding Instrument, after changing location in the Dialog, leads to crash
                                                                          • #289561: Playback continues to repeat after end repeat barline has been deleted
                                                                          • #289552: Crash splitting multimeasure rest
                                                                          • #289531: Deleting first measure causes crash when a hairpin starts there
                                                                          • #283828: Remove staff lines from end-start repeat barline in the repeats palettes

                                                                          Release notes for MuseScore 3.1 Release Candidate (May 23, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.1.0.22357, Windows 7+ 64-bit: 3.1.0.7011, Windows 7+ 32-bit: 3.1.0.7011, AppImage: 3.1.0. (revision: 8b1a7dc4) 2019-05-23 https://musescore.org/en/3.1rc

                                                                          New

                                                                          • Elements can be moved freely while still participating in automatic placement

                                                                          Improvements

                                                                          • Playback starts immediately on large scores
                                                                          • Continuous view performance was significantly improved
                                                                          • Layout of scores imported from MuseScore 2 is now preserved more faithfully
                                                                          • Size and usability of Play Panel is now improved
                                                                          • Added chord symbol support for fret diagrams

                                                                          Fixes

                                                                          • System position calculations allocated too much space
                                                                          • Courtesy clefs and key signatures were positioned incorrectly around repeat barlines
                                                                          • Cross-staff notation was incorrect in some cases
                                                                          • Barline spanning was wrong in some cases
                                                                          • Elements were not scaled correctly on small staves
                                                                          • Invisible staves affected layout
                                                                          • Side panels became undockable after being undocked and closed once
                                                                          • Piano keyboard display didn't update when adding accidental using toolbar or palette
                                                                          • Could not add proper slur to grace notes when there were more than one

                                                                          Complete list of issues resolved

                                                                          The scope of the changes in MuseScore 3.1 Release Candidate includes changes mentioned in MuseScore 3.1 Beta and MuseScore 3.1 Beta Update except the following ones:

                                                                          • #68456: Bends are out of tune
                                                                          • Solo the instruments lying behind selected measures if any

                                                                          These will be revisited for a later release.

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • Playback starts immediately when working with large scores
                                                                          • #288333: Different dynamics on piano staves don't work with specific synthesizer configuration
                                                                          • #289298: Score plays fine in 3.0, 3.1, fails online
                                                                          • #276344: Zerberus Channel increase

                                                                          Layout and automatic placement

                                                                          • #278999: Need option to completely disable Auto Placement
                                                                          • #288993: Stems and articulations added to skyline incorrectly for cross-staff notes
                                                                          • #288976: Bug: Stems too long when line distance increased on staffs with less than five lines
                                                                          • #284461: Line Issue - Hooks on diagonal lines are skewed
                                                                          • #287484: Lines ignoring Placement and/or Offset style settings
                                                                          • #287723: Right-aligned rehearsal marks should align to barline
                                                                          • #186111: Rehearsal marks are incorrectly positioned in case of repeat barline
                                                                          • #285361: Footer: add 5mm Y-offset to place within margin
                                                                          • #285467: System distance unequal when system heights differ
                                                                          • #288207: Spacing cramped before repeat-start
                                                                          • #289241: Hairpin with above placement moved onto staff jumps back on next layout
                                                                          • #289498: Bad layout of beam in presence of cross-staff beam in another voice
                                                                          • #289492: Bad layout of slurs in presence of cross-staff beams
                                                                          • #289501: Turning off auto placement globally remove leading space in measures
                                                                          • #289502: Edits after first system cause additional space to accumulate between systems
                                                                          • #289148: Lyrics with manual adjustments not imported consistently
                                                                          • #288704: Cross staff trill bug
                                                                          • #288655: Natural trill
                                                                          • #287617: Double barlines span to next staff when instrument inserted
                                                                          • #279980: Place Rehearsal Marks over barlines
                                                                          • #288162: "Style -> Bar -> Note left margin" Not working properly with accidental in invisible staff
                                                                          • #279415: Winged repeats at bottom of barline span if last staff invisible
                                                                          • #288283: Barlines Refused to Stay Connected over Invisible Staff lines
                                                                          • #277039: small staves incorrect bar lines
                                                                          • #289423: note-anchored line should connect notehead centers
                                                                          • #287839: Changes to scale of one staff can affect elements on other staves
                                                                          • #278314: Tremolo positioned incorrectly for small chords
                                                                          • #289312: More offsets that don't scale with staff size
                                                                          • #289211: Lyric hyphens are removed in last measure before a system break
                                                                          • #285535: clef change in one staff adds unnecessary spacing in other staves
                                                                          • #285605: Tenor Clef does not appear after repeat
                                                                          • #228531: Courtesy clefs don't appear on lines ending in repeat barlines
                                                                          • #289548: Some articulations are placed incorrectly far from the note

                                                                          UI/UX

                                                                          • #286679: Piano keyboard display does not update when adding accidental using toolbar or palette
                                                                          • #287528: Side panels not dockable after being undocked and closed once
                                                                          • #288489: Style dialog shouldn't resize when left pane is hidden
                                                                          • #288528: After you change the pitch of a note that's tied, both tied notes end up selected
                                                                          • #280650: MuseScore 3.0 Plugin Creator Source Viewer line number display is truncated
                                                                          • Improved performance in Continuous view
                                                                          • #286500: Inspector: highlight buttons on mouse over
                                                                          • #288348: Optimize size of Play Panel when docked
                                                                          • #153006: Switch to the tab, if I try to open a file that's already open in MuseScore

                                                                          Commands/Properties

                                                                          • #279131: Cannot add proper slur to grace notes when there are more than one
                                                                          • #288343: Selection lost on paste to single note
                                                                          • #289250: Tabbing in edit mode leaves hairpin
                                                                          • #287445: setting crescendo / diminuendo lines and hairpins position to below staff doesn't 'survive' save/close/reopen
                                                                          • #279245: Stacking order, autoplace not saved for generated stems
                                                                          • #139846: Leading space adjustment for generated elements lost on save/reload
                                                                          • #289293: Articulation and fret diagram min distance not saved
                                                                          • #289286: Figured bass properties not saved
                                                                          • #286001: Italic text appended to a dynamic not correctly imported
                                                                          • #284074: Vibrato style dialog not working?
                                                                          • #287613: Set to staff default only affects first selected barline
                                                                          • #119101: Wrong undo visibility change for dotted note, where note and dot have different visibiilities
                                                                          • #49856: Glissando not copied if destination staff has links
                                                                          • #287397: Can only select first staff while in Single page view
                                                                          • #289453: [Regression] Unable to start slur mode (within note input) one voice > 1 at end of measure
                                                                          • #284613: "Clef/key right margin" in Format>Style, Measure page, is ignored
                                                                          • #77396: Allow clef change after barline (for repeats)

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #282333: Crashing on lyric entry
                                                                          • #288865: Moving a key signature with Ctrl + Shift crashes the program
                                                                          • #288609: Crash when creating parts if a rest on a wrong staff after using cross-staff notation
                                                                          • #288802: Score causes crash on load, cross measure beam
                                                                          • #289067: Edit beam spanning two measures if shorter value in the other voice results in crash

                                                                          Performance

                                                                          • #286882: Extreme slowdown in continuous view, depending on number of beamed notes

                                                                          Fretboard diagrams

                                                                          • Add chord symbol support for fret diagrams and some small read/write fixes

                                                                          Miscellaneous

                                                                          • #267856: Allow loading old .drm and .mss files

                                                                          Release notes for MuseScore 3.1 Beta Update (May 5, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.1.0.22068, Windows 7+ 64-bit: 3.1.0.6721, Windows 7+ 32-bit: 3.1.0.6721, AppImage: 3.1.0. (revision: 1982daf6) 2019-05-05 https://musescore.org/en/3.1beta

                                                                          New

                                                                          • Option to completely disable Auto Placement

                                                                          Improvements

                                                                          • "MuseScore File" string (under File -> Save As...) now indicates which version you are about to save (MuseScore 3)
                                                                          • Move the whole segment on dragging a note in edit mode
                                                                          • Allow changing duration of multiple notes
                                                                          • Solo instruments related to selected measures if any when starting playback
                                                                          • Multiple fixes and improvements for fretboard diagrams

                                                                          Fixes

                                                                          • Layout of small staves was incorrect in some cases
                                                                          • Key signatures displayed incorrectly after clef change
                                                                          • Grace notes (after) collided with accidentals on main note
                                                                          • Key signature disappeared in all but first stave
                                                                          • Note's dot's visibility was incorrect when toggling visibility with note and dot selected
                                                                          • Couldn't pan score while playing when a note was selected
                                                                          • Instrument Change didn't transpose
                                                                          • Couldn't delete clef change at the start of a system

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • Solo selected instruments if any when starting playback

                                                                          Layout and automatic placement

                                                                          • #287120: Some edits do not update systems (stretch, paste)
                                                                          • #282503: Spurious line break after removal of line break on the previous system
                                                                          • #288508: Bad layout of lines (text line, trill line...) before start repeat
                                                                          • #287839: Changes to a scale of one staff can affect elements on other staves
                                                                          • #287885: Position of staff text already present on staff not scaled when making staff small
                                                                          • #287807: Chord symbols do not scale with staff size
                                                                          • #287992: Melisma line not showing on lyric extended only once
                                                                          • #257131: Melisma bug: a line drawn in reverse when syllable overlaps next note
                                                                          • #282099: Melisma underscore going backward in multi-voice context
                                                                          • #287423: Key signatures displayed incorrectly after clef change
                                                                          • #287993: Bug in Pedal Mark before Repeat Barline
                                                                          • #283473: Grace notes(after) collide with accidentals on main note
                                                                          • #287620: Changing barline type in part affects only that staff in the score
                                                                          • #281651: Stretch having a miniscule effect on mmrests
                                                                          • #287472: Tab Clef for balalaika is misplaced
                                                                          • #288693: Disappearing key signature in all but first stave

                                                                          UI/UX

                                                                          • #283063: "MuseScore File" string (under File -> Save As...) does not indicate which version you are about to save as
                                                                          • #287640: View Documents side by side displays wrong score name
                                                                          • #288437: Range selection is drawn incorrectly
                                                                          • #276404: Format > Style window is too large
                                                                          • #287577: Barlines not drawn in edit mode (drag)
                                                                          • #287908: Dynamics: velocity change spinner not working properly
                                                                          • #287747: Bad drawing of selection rectangle when selection ends with a disabled segment
                                                                          • #284080: Beats not listed correctly in the status bar for cut time
                                                                          • #288548: Playback cursor does not follow complex tuplets

                                                                          Commands/Properties

                                                                          • Move the whole segment on dragging a note
                                                                          • Allow changing duration of multiple notes
                                                                          • #278999: Need option to completely disable Auto Placement
                                                                          • #276620: Staff type change difficult to add
                                                                          • #287852: Deleting staff type change does not update score
                                                                          • #116771: Note's dot's visibility is incorrect when toggling visibility with note and dot selected
                                                                          • #288420: Can't pan score while playing when a note is selected
                                                                          • #288422: Set default shortcut to "add brackets to element"
                                                                          • #23667: Add / Text / Title et al does not reposition score view to show the text being added
                                                                          • #285602: Note Anchored Line does not appear until save/reload
                                                                          • #288250: Instrument Change does not transpose
                                                                          • #287428: Cannot delete clef change at the start of a system
                                                                          • #287630: Changing instrument doesn't switch to the expressive patch
                                                                          • #283168: "Create system header" property of horizontal frame is not persisted in the score
                                                                          • #272892: Arpeggios: user-modified height cannot be reset to the default

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #283542: Remove vertical frame in Page View if the main score in Continuous View results in a crash
                                                                          • #288474: Particular .mscz file crashes MuseScore 3.0.5 before it can open
                                                                          • #287622: Lines not scaled properly by paste half/double/special, possible crash
                                                                          • #287806: MS 3.1 Beta crash in Spanner::endCR() on unassigned track2
                                                                          • #288014: Melisma lines saved in 3.1 do not appear when opened in 3.0
                                                                          • #288383: Crash when inserting notes in voice 2 when first rest is deleted
                                                                          • #288227: Copy-paste tied notes included in linked staves in a score with parts leads to crash
                                                                          • #288190: Crash adding barline via drag&drop
                                                                          • #287841: Crash when adding tempo marking on multimeasure rest
                                                                          • #282184: Crash on enabling multimeasure rests in score with an invisible staff containing tie on two systems
                                                                          • #284012: Crash by editing/selecting an entire score when another hidden staff contains beamed notes
                                                                          • #287515: [Feedback Form] Crash on changing notes after transposition
                                                                          • #287979: Attempt to add a symbol of any kind to a text element crashes Musescore
                                                                          • #287883: Sextuplets display as triplet, corruption on copy/paste
                                                                          • #287615: Crash on opening particular score
                                                                          • #287698: Crash when finishing Setup Wizard with tempo box checked in 3.1 Beta
                                                                          • #285174: MuseScore Crashes Immediately on Startup on Windows
                                                                          • #287283: Version 3 will not open startcenter because OpenGL not supported

                                                                          MusicXML Import/Export

                                                                          • #284068: Musicxml export - Slur between note and rest doesn't export
                                                                          • #272223: [MusicXML export] Text crescendo exported as diminuendo hairpins
                                                                          • #288271: [MusicXML import] missing string data importing tablature staff containing spurious empty staff-details elements

                                                                          Fretboard diagrams

                                                                          • #283679: Fretboard diagrams: symbols on top of the diagram, and position number do not resize when scaling is changed
                                                                          • #283762: Fretboard diagrams: remove some "Set as style" buttons
                                                                          • #280575: Copy&Paste Fretboard diagram’s number is mirrored
                                                                          • #285613: Barre Deletes Dots on Higher Frets
                                                                          • #285616: Musescore Leaves Dots Under Barres in Chord Diagrams
                                                                          • #275658: The ability to draw partial barre is missing for fretboard diagrams
                                                                          • #283452: Fretboard Diagrams: open string symbol persists even when a finger dot is applied
                                                                          • #283674: Fretboard diagrams: barré deleted when you add a dot at another position
                                                                          • #283676: Fretboard diagrams: barré deleted when a separate dot is added afterward at the same position
                                                                          • #283678: Fretboard diagrams: barré applied wrongly if there is another dot already at the same position
                                                                          • #286183: Fret number in fretboard diagram cannot be saved
                                                                          • #283759: Fretboard diagrams: Barré property is redundant
                                                                          • #284966: Fretboard diagrams: barre lost on copying; and when saving to a workspace

                                                                          Miscellaneous

                                                                          • #283568: Score name appearing in instrument parts
                                                                          • #286600: [Dev] Compiling archive under windows is out of date
                                                                          • #287906: [Dev] Duplicated note events in test files
                                                                          • #287780: Chord symbols do not display in startup score if no custom default style specified
                                                                          • #285517: Some translated Tours strings show up as untranslated

                                                                          Release notes for MuseScore 3.1 Beta (April 12, 2019)

                                                                          Build number Date Announcement
                                                                          macOS 10.12+: 3.1.0.21781, Windows 7+ 64-bit: 3.1.0.6437, Windows 7+ 32-bit: 3.1.0.6437, AppImage: 3.1.0. (revision: 06f0dddf) 2019-04-12 https://musescore.org/en/3.1beta

                                                                          New

                                                                          • Single-note dynamics playback - long notes can play dynamic changes
                                                                          • Updated soundfont that supports single-note dynamics out of the box
                                                                          • High quality soundfont with better strings and synth instruments available as an extension in the Resource Manager
                                                                          • Half-time/Double-time feature that shortens and lengthens rhythms on copy-pasting
                                                                          • Linearization feature that unrolls all repeats
                                                                          • Internal computational approach that allows creating 256th, 512th, 1024th notes and any kind of compound tuplets
                                                                          • Online documentation for Plugin API is available

                                                                          Improvements

                                                                          • Select notes after deleting various elements
                                                                          • Make copy-pasting hairpins possible
                                                                          • Fix significant lag on iterating over notes with left-right arrows
                                                                          • UI refinements including more streamlined Inspector

                                                                          Fixes

                                                                          • Accent-staccato didn't work in default template
                                                                          • Some properties were not kept on saving score
                                                                          • Incorrect key/time signatures and clefs appeared in the score in specific cases
                                                                          • User-modified barlines were not linking correctly between staves of a score, parts, and multimeasure rests
                                                                          • Ties were laid out incorrectly in some cases
                                                                          • Problems with layout of with beams, slurs, tuplets, and tremolo in cross-staff notation
                                                                          • Sizes and positions of some elements were not scaling correctly for small staves
                                                                          • Brackets didn't appear after section break
                                                                          • Users were automatically logged out after 5 hours when using Save Online
                                                                          • Phrasing in target measure was not cleared on copy-pasting
                                                                          • ChordIdentifier Plugin didn't work with MuseScore 3

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #68456: Bends are out of tune
                                                                          • #286207: Fortepianos that last longer than a segment play incorrectly
                                                                          • Fix double articulations playback in default template
                                                                          • #286757: Accent-staccato playback bug in string quartet template
                                                                          • #285934: [Guitar Pro] Regression: GP 5/4/3 files Plays Piano Only
                                                                          • Single-note dynamics feature
                                                                          • New soundfont with improved strings, synth sound and single-note dynamics support out of the box

                                                                          Layout and automatic placement

                                                                          • #281024: Invisible staves inappropriately factored into note spacing
                                                                          • #279259: Chord symbol spacing issues
                                                                          • #88411: Ties in tablature: vertical position wrong and ends hidden behind fret marks
                                                                          • #279182: Cross-staff slurs/ties trying to avoid note on wrong staff
                                                                          • #286794: Permanent double time signature/key signature after style changed then save/reload
                                                                          • #280969: Cross staff 8ths lose beam if all notes moved to staff above
                                                                          • #281024: Invisible staves inappropriately factored into note spacing
                                                                          • #284046: Breaths & Pauses accumulate offset
                                                                          • #284644: Part Name reference point in generated parts
                                                                          • #280657: Measure Rests laid out incorrect x position in measure after adjusting their x/y offset
                                                                          • #283177: Insert measure at beginning of system generates extra undeletable key signature.
                                                                          • #286948: Ties arranged obliquely by automatic placement if more than one voice exists in a staff (MuseScore 3.1.0)
                                                                          • #287022: Tie position incorect over line break without clef
                                                                          • #286530: Dot sizes small in instrument parts
                                                                          • #279417: Brackets do not appear after horizontal frame
                                                                          • #281019: Staff text offset applied to wrong above/below position
                                                                          • #282021: Beam thickness not scaling with staff size
                                                                          • #282026: Stem Displacement
                                                                          • #286645: Elements not scaling with staff size
                                                                          • #284440: Positions above/below staff not scaling with staff size
                                                                          • #283312: Hairpin position changes on reload if horizontal offset applied on small staff
                                                                          • #285802: strange placement of tuplet number in cross-staff tuplets
                                                                          • #280531: Beam separates from stems when crossing staves.
                                                                          • #285603: Cross-staff tremolo causes disconnected beams
                                                                          • #286017: initial barline vanishes when changing linetype
                                                                          • #280912: Double barline not synced in a score with parts
                                                                          • #102821: "Dropping" end barline onto Multi-Measure rest should apply barline to end of multi-measure rest
                                                                          • #282696: Double Bar lines do not extend between instruments
                                                                          • #283318: Show barlines check box has no effect
                                                                          • #285279: Hide system barlines check box has no effect
                                                                          • #123436: Double barline doesn't appear on the staff of the added instrument

                                                                          UI/UX

                                                                          • #283828: Add end-start repeat barline back to barlines- and repeats palettes
                                                                          • #286068: Playback cursor not tracking notes on invisible staves
                                                                          • #286276: Leave note selected when adding palette items in note input mode
                                                                          • #286067: Palette selections stay highlighted
                                                                          • Inspector UI improvements
                                                                          • #279389: Request to rename "Timewise delete" command
                                                                          • Hairpins could not be copied to another place
                                                                          • #286821: Common instruments lists all
                                                                          • Users were automatically logged out 5 hours after log in
                                                                          • Improved UI for play panel widget
                                                                          • #284501: The "stemless" checkbox inside bar properties does not produce effect unless the page is redrawn
                                                                          • Fix palette elements drawing
                                                                          • #286651: Redundant text style controls in various Style dialog sections
                                                                          • #276504: Palettes: need to double-check a few icons
                                                                          • #283140: Replace 'Delete selected measures' by 'Timewise Delete'

                                                                          Commands/Properties

                                                                          • #278847: 2 decimal places for tempos
                                                                          • #282862: Moving an image can't be undone
                                                                          • #285781: Non-default style settings in score get applied to all parts on reload, leading to bad transposition and other loss of data
                                                                          • #283592: Feature to write out jumps and repeates (Linearization)
                                                                          • #285923: Lines from palette added by double-click with range selection ignore score style settings
                                                                          • #287141: No element is selected after deleting slur or other marking
                                                                          • Selection was dropped after deleting various elements
                                                                          • #45361: copy/paste and "R" do not delete slurs or lines in target measures
                                                                          • #281083: Slur should be deleted when changing duration of note deletes subsequent notes connected to the slur.
                                                                          • #285383: Edits to "let ring" and "palm mute" lost on save/reload
                                                                          • #282191: Lines: need to add text to "Palm Mute" and "let ring"
                                                                          • #284991: Fermatas prevent hiding of staves
                                                                          • #282890: Figured bass style parameters not saved
                                                                          • #285432: Fermata manual adjustment not saved
                                                                          • #286121: Text font and size in footer of a part are fixed (to those of score). Changes have no effect.
                                                                          • #283033: Improve Delete measure

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #283545: Crash on undoing removal horizontal frame
                                                                          • #285888: Crash on removing a horizontal frame twice
                                                                          • #285662: 3:4 tuplet appears corrupted
                                                                          • #286240: Crash in Brackets Editing Mode and on Save
                                                                          • #286946: [MusicXML import] crash when importing file with duplicate rest
                                                                          • Possible crash happened on startup because of sequencer initialiser code
                                                                          • Possible crash happened on crash reporter destruction
                                                                          • #287102: Remove Selected Range (Timewise Delete) of a partial note in another voice leads to crash
                                                                          • #274614: Crash after stopping playback during soundfont load and doing something
                                                                          • #273783: Crash when playing and closing score whilst synthesiser loads
                                                                          • #279801: remove MDL ends in crash
                                                                          • #283497: Setting of disable multimeasure rests in parts is lost after saving
                                                                          • #286121: Insert measures of exactly one system leads to crash on Undo/Redo
                                                                          • #278707: Files with 256th, 512th and 1024th notes are corrupted
                                                                          • #285693: Crash when enabling MIDI via palette button

                                                                          Plugins

                                                                          • Add Doxygen based documentation for Plugin API
                                                                          • NoteNames plugin didn't work correctly with grace notes
                                                                          • ChordIdentifier plugin didn't work in MuseScore 3

                                                                          Performance

                                                                          • Fix significant lag on iterating over notes with left-right arrows

                                                                          Miscellaneous

                                                                          • #285858: Turning off mmrests results in assertion failure
                                                                          • Fix memory leaks which led to consuming too much RAM
                                                                          • Some elements appeared untranslated
                                                                          • #277903: sad state of command line option documentation
                                                                          • #281867: "MuseScore quit unexpectedly" when closing MuseScore 3.0.[1-5] on macOS with a MIDI device
                                                                          • #286666: Figured bass: Error message when no note selected untranslatable
                                                                          • Implement half time and double time feature on copy pasting
                                                                          • User appeared logged out when MuseScore finished incorrectly

                                                                          Release notes for MuseScore 3.0.x

                                                                          Release notes for MuseScore 3.0.5 (March 12, 2019)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.5.21343, Windows 64-bit: 3.0.5.5992, Windows 32-bit: 3.0.5.5992, AppImage: 3.0.5. (revision: 58dd23d) 2019-03-12 https://musescore.org/en/3.0.5

                                                                          Improvements

                                                                          • The whole chord plays when iterating over notes with left-right arrows
                                                                          • Support more properties for fingering
                                                                          • Add more properties for Plugin API
                                                                          • Optimise New Score Wizard start time and layout calculations

                                                                          Fixes

                                                                          • MuseScore 3.0.4 crashed on startup on macOS
                                                                          • Score margins and positioning of related staves were calculated incorrectly
                                                                          • Spacers worked incorrectly when interacting with page borders
                                                                          • Measure counting was wrong when setting a custom offset value
                                                                          • Keyboard navigation in Single Page view worked incorrectly
                                                                          • MuseScore crashed on finishing work on Windows
                                                                          • MuseScore crashed when changing time signature in parts
                                                                          • MuseScore crashed when selecting a bracket in edit mode

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #283946: Play the whole chord when iterating over notes with Left-Right arrows
                                                                          • Fix tuning offset for Sori and Koron instruments
                                                                          • Fix the repeats playback in demo score "Unclaimed_Gift.mscx"

                                                                          Layout and automatic placement

                                                                          • #284307: Clef doesn't change when adding clef to the first measure of the score
                                                                          • #284637: Elements above top system can cross into margin and off the page
                                                                          • #284635: The last system of a page is one staff height too far from the margin
                                                                          • #281253: Staff spacer down doesn't work at page bottom
                                                                          • #284641: Content above/below invisible staff affects system distance
                                                                          • #283365: Staff spacer up need to "invade" the top line of the upper staff in order to start inserting space
                                                                          • #284794: Too much space allocated for minTieDistance when tie overlaps noteheads
                                                                          • #171036: setting top staff to small one affects some texts that are attached to the system rather than the staff
                                                                          • #285227: Wiggly line has an incorrect length for some trill line types
                                                                          • #284069: Spacing of lyrics lines too tight after export of parts
                                                                          • #285370: Articulations too far from some beamed notes on drum staves
                                                                          • #280390: Spurious key change after transposition

                                                                          UI/UX

                                                                          • #281810: Label translations truncated in some dialog boxes
                                                                          • #281426: Excluding measure from measure count causes bad count; fixes on relayout
                                                                          • #282810: Wrong measure number when starting with a multimeasure rest
                                                                          • #280492: Fretboard diagrams: Offset needs to be renamed and should correspond with the diagram
                                                                          • #281957: Regression: display of beam properties for a selected note
                                                                          • #281441: creating part while element are selected will undesirably set the SELECTED flag for those cloned elements even though the part scores won't have a selection
                                                                          • #283851: File path and name in score properties are unselectable and can't be copied to the clipboard
                                                                          • Fix tempo text drawing in Timeline widget
                                                                          • #284660: SC4 compressor: RMS spinner not working properly
                                                                          • #284788: Keyboard nav in Single Page view broken
                                                                          • #270765: Buttons in plugin manager too small for their texts by default
                                                                          • #281957: Regression: display of beam properties for a selected note

                                                                          Commands/Properties

                                                                          • #280950: Text style style changes not applied to existing chord symbols
                                                                          • #282507: Frame gap in imported score lost on save
                                                                          • #282433: "va" text in 8va disappears after reopening score ("Numbers Only" becomes checked again)
                                                                          • #284502: Rehearsal marker position reset by everything in editstyle.ui
                                                                          • #284445: Ctrl key is ignored when trying to limit barline change to single staff
                                                                          • #284347: Add Placement above/below property for fingering
                                                                          • #284886: Notes not entered in first measure entered into wrong octave

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #285057: MuseScore 3.0.4 on macOS is crashing on startup (and 78 more issues and topics)
                                                                          • #285100: Crash when moving beam if first note of beam is in the first measure and other notes of the beam are in the second measure
                                                                          • #280878: Crash after adding text then exiting edit mode with no text
                                                                          • #283546: Removing a text frame causes a second one to appear and leads to crash after new removal
                                                                          • #281867: "MuseScore quit unexpectedly" when closing MuseScore 3.0.[1-4] on macOS with a MIDI device
                                                                          • Fix crash on closing MuseScore caused by the crash reporter facility
                                                                          • Exporting to SVGs crashes the editor in some rare cases
                                                                          • #285531: Crash on SVG export if MM rests and boxes are within one system
                                                                          • #281154: Crash with the first note of measure set to beam middle and nothing to beam to
                                                                          • #282275: Crash when changing Time Signature in parts
                                                                          • #280821: Crash when selecting bracket already in edit mode

                                                                          Plugins

                                                                          • #283179: adding (some of the) missing objects/properties in the plugin framework

                                                                          Miscellaneous

                                                                          • #285019: Tours strings for French shows up untranslated
                                                                          • #282730: "Untitled"/"My First Score" does not respect locale page size
                                                                          • #285484: predefined drumset files (.drm) cannot get loaded
                                                                          • Optimised opening "New score wizard" by generating templates preview on demand
                                                                          • #285631: [MusicXML import] Misplaced ties when importing .xml files

                                                                          Release notes for MuseScore 3.0.4 (February 28, 2019)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.4.21117, Windows 64-bit: 3.0.4.5763, Windows 32-bit: 3.0.4.5763, AppImage: 3.0.4. (revision: cda40803) 2019-02-28 https://musescore.org/en/3.0.4

                                                                          Fixes

                                                                          • #284426: [Regression] Instruments play as piano with odd side effects
                                                                          • #284874: [Regression] "Save online" doesn't work on Mac with MuseScore 3.0.3
                                                                          • #284913: [Regression] Cannot open Brass Quartet and Brass Quintet templates
                                                                          • #283152: Crash when removing a section break, or by various editing work before it, in a score with parts and MM rests
                                                                          • #280685: Copying measure repeats doesn't work

                                                                          Release notes for MuseScore 3.0.3 (February 26, 2019)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.3.21090, Windows 64-bit: 3.0.3.5734, Windows 32-bit: 3.0.3.5734, AppImage: 3.0.3. (revision 5a0be2ac) 2019-02-26 https://musescore.org/en/3.0.3

                                                                          New

                                                                          • New crash report facility

                                                                          Improvements

                                                                          • Whole score playback can be turned on when in the Part tab using the mixer. Part playback works by default in in the Part tab.
                                                                          • Improved global performance
                                                                          • Drag-and-drop user experience is improved

                                                                          Fixes

                                                                          • Caesuras and sections breaks didn't cause pauses in playback
                                                                          • Some properties were not properly saved
                                                                          • Fermatas over barlines could not be added
                                                                          • Articulations could not be added to grace notes
                                                                          • Redundant key/time signatures appeared in Page/Continuous view and Parts
                                                                          • Visibility was not properly applied
                                                                          • Ties failed to be copied-pasted in a score with parts
                                                                          • Keyboard navigation in Continuous View was broken

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • Added double articulations defaults to instruments.xml
                                                                          • #109941: Regression—playback in single part instead plays full score (+18 more issues and 32 forum topics)
                                                                          • #276217: Support keyboard playback while score playback is engaged
                                                                          • #281909: Caesuras and sections breaks don't cause pauses in playback
                                                                          • #282249: Guitar vibratos play earlier than they should after repeated measures
                                                                          • #282701: Change to “Pizzicato” from Part score doesn’t work

                                                                          Layout and automatic placement

                                                                          • #280561: [Feedback Form] Collisions between systems possible if bottom staff of upper systems is invisible
                                                                          • #282404: MS3: Line color not being saved
                                                                          • #282629: Lyrics can not be be placed above/below staff individally, only the whole verse
                                                                          • #283149: Changing text element color (via Inspector, not style) is not saved
                                                                          • #283788: Position adjustments on text with Up/Down key is lost on save
                                                                          • #280428: Too much space allocated around tab staff with"beamed" notes
                                                                          • #282035: Footer Text Position is Not Effected by Changes in Offset or Alignment Settings
                                                                          • #282130: Invisible lyrics hyphens and melisma lines remain when disabling Show invisible or when printing/exporting
                                                                          • #284282: No layout performed on move of rest up/down
                                                                          • #284341: Alignment of hairpin lines off compared to dynamics
                                                                          • #284380: Staccato overlaps highly slanted beam on upper voice
                                                                          • #280865: Lyrics on rests displayed a line too low
                                                                          • #281910: Ottavas are not correctly imported
                                                                          • #283405: "Ped. *" has the line set to visible in 3.0 in advanced workspace , was invisible in 2.x
                                                                          • #270990: Unable to add fermatas to bar lines
                                                                          • #283157: Fingering numbers cannot be applied to grace notes
                                                                          • #283180: TAB Fingerings positioned wrongly
                                                                          • #283323: Disappearing fingering on a subsequent system after layout change
                                                                          • #283834: Setting pedal and (de)crescendo lines to invisible doesn't work in PDF export and uploading
                                                                          • #283832: [Broken] Key Signature Left Margin for Initial Barlines with No Clef
                                                                          • #279925: Permanent courtesy time sig and key sig before system/page break when toggling in Continuous View and/or Parts
                                                                          • #283732: Articulations not appearing on grace notes

                                                                          UI/UX

                                                                          • Make templates categories translatable
                                                                          • Make Above/Below texts in inspector translatable
                                                                          • #278767: "no drop" mouse pointer badly positioned
                                                                          • #280338: Can't exit full screen after closing file
                                                                          • #70531: Appended frame inactivates Page Up/Down and End keys in continuous view
                                                                          • #281831: text cursor before first character of a text element or before a special character of text aren't initialized to text element's default
                                                                          • #276384: Show invisible shortcut does not work until screen is redrawn
                                                                          • #281827: Text Toolbar does not update font info when cursor changes
                                                                          • #280468: Notes: choosing the "Style…" option in the right-click menu leads to wrong dialog
                                                                          • #283600: Offset limited to 99.99sp in Inspector, prevents precisely moving elements in frames from left to right

                                                                          Commands/Properties

                                                                          • #280917: Ties fail to be copied-pasted in a score with parts
                                                                          • #282864: Dropping "Image" on note attaches it to segment instead
                                                                          • #280900: multi-staff implode doesn't work when selection is a single measure or smaller
                                                                          • #282918: disabling multimeasure rests in parts doesn't "survive" save/close/reopen
                                                                          • #283701: User Text Styles settings are lost after saving
                                                                          • #283830: Shift + Space for fingering broken by another fix
                                                                          • #272887: Unable to add mid-measure clef on the first tick of a measure
                                                                          • #284140: cutting and pasting music deletes special barlines
                                                                          • #279178: Selecting dynamic change a pressing x does not move item
                                                                          • #284503: "Display in concert pitch" function in Style menu doesn't change key signatures

                                                                          Corruptions and/or loss of data, crashes

                                                                          • New crash reporter facility
                                                                          • #279671: MusicXML export loses tablature info, produces unrecognizable notation
                                                                          • #281411: Lyrics: select all and "X" causes program to freeze
                                                                          • #283316: Hang on pressing space after entering fingering on only note of score

                                                                          Plugins

                                                                          • #283105: Builtin plugins don't work

                                                                          Miscellaneous

                                                                          • #280651: 3.0 does not compile
                                                                          • #282724: Template Concert Band (Europe version)
                                                                          • Optimized slurs/ties and other curves approximation
                                                                          • Adapt CMake scripts to CMake 3.13
                                                                          • Refactor musicXML note import code

                                                                          Release notes for MuseScore 3.0.2 (January 29, 2019)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.2.20666, Windows 64-bit: 3.0.2.5312, AppImage: 3.0.2. (revision: 8ca4d2c) 29.01.2019 https://musescore.org/en/3.0.2
                                                                          Windows 64-bit: 3.0.2.5315 (HotFix for #283046: Changing preferences or workspace leads to error) (revision: a8b90a8) 30.01.2019
                                                                          Windows 32-bit package: 3.0.2.XXXX (revision: 8ca4d2c) XX.XX.2019 https://musescore.org/en/3.0.2

                                                                          Improvements

                                                                          • Reworked login screen when using Save Online allows signing in via Facebook and Google and creating an account from within the editor
                                                                          • New easy fingering input mode and improved layout

                                                                          Fixes

                                                                          • Plugins framework didn't work
                                                                          • Grace notes displayed the wrong size in TAB staves
                                                                          • Default window size was too large on a multi-monitor setup
                                                                          • Color was not available as a text style setting, including issues with coloring lyrics for different voices
                                                                          • Slurs were not exported properly to MusicXML
                                                                          • Tempo text was not imported properly from MusicXML

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #282701: Change to “Pizzicato” from Part score doesn’t work

                                                                          Layout and automatic placement

                                                                          • #282384: Grace notes display wrong size in TAB staves
                                                                          • #268123: Wrong vertical position of breath mark
                                                                          • #281269: Import V2.3.2 to V3. Dotted barlines not imported
                                                                          • #280807: Regression - 3.0 doesn’t distinguish between fingerings and LH guitar fingerings.
                                                                          • #280088: Improve the L H Guitar Fingering by adding an override option
                                                                          • #279113: Fingering: note accidental can result in collision
                                                                          • #280412: Fingering: collision with arpeggio bracket
                                                                          • #280516: Fingerings do not avoid beams
                                                                          • #280078: RH Guitar Fingering: vertical placement issue
                                                                          • #280017: Fingering vertical placement wrong on imported score
                                                                          • #279241: Fingering: automatic placement wrongly positions LH Guitar Fingering
                                                                          • #274936: Incorrect fingering text position
                                                                          • #267499: Update fingering position on change of beam orientation
                                                                          • #115861: Alternative fingering default position, all above the staff
                                                                          • #279963: Vertical placement issue with the new L H Guitar Fingering

                                                                          UI/UX

                                                                          • #281980: Arco and pizz. text should be non-italics
                                                                          • #280497: default window size way to large on multi-monitor setup (on Win at least). Shouldn't be bigger than primary screen

                                                                          Commands/Properties

                                                                          • #278175: Easy fingering input mode
                                                                          • #280613: Color not available as a text style setting
                                                                          • #281805: User text style compatibility with 2.x
                                                                          • #281821: Mid-measure barline from the palette isn't deletable
                                                                          • #281896: "Hide courtesy" setting not preserved on save/reload
                                                                          • #280885: "First page number" in Page Settings no longer works

                                                                          Corruptions and/or loss of data, crashes

                                                                          • #282186: Crash when loading a score of version 1.3 involving tremolos and underlying corruption
                                                                          • #280686: MuseScore 3.0 crashes on opening if JACK Audio has been registered on Windows.
                                                                          • #280937: Lyrics with hyphen on two systems crashes the program when changing the instruments order

                                                                          Plugins

                                                                          • #280740: Plugins no longer work in master
                                                                          • #282764: plugins random and random2 fail on RUN
                                                                          • #282050: Note Names Plugin doesn't work
                                                                          • #279289: Color note plugin has no effect
                                                                          • #278913: Color notes plugin not working
                                                                          • #278505: ABC Import plugin not working
                                                                          • #280740: Plugins no longer work in master

                                                                          Miscellaneous

                                                                          • #269939: order preset list to account for similar instruments on banks > 0
                                                                          • Fix translating of brackets elements in palettes
                                                                          • Add Filipino language
                                                                          • #21435: [MusicXML] always export Slur placement
                                                                          • #163726: [MusicXML Import] Losing Tempotext when saving as mscz/mscx
                                                                          • #280121: Frame text positions incorrect on MusicXML export
                                                                          • #282997: Make login via Facebook and Google possible when saving scores online

                                                                          Release notes for MuseScore 3.0.1 (January 15, 2019)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.1.20439, Windows 64-bit: 3.0.1.5087, AppImage: 3.0.1 (revision: 06a66a2) 15.01.2019 https://musescore.org/en/3.0.1
                                                                          Windows 32-bit package: 3.0.1.5088 (revision: 06a66a2) 20.01.2019 https://musescore.org/en/3.0.1

                                                                          Improvements

                                                                          • Redesign of New Score Wizard makes it easier to search templates, provides better score previews, and significantly improves accessibility for blind users
                                                                          • Reworked Mixer UI allows minimizing and making it dockable
                                                                          • Better automatic placement of hairpins and dynamics
                                                                          • Better import of 2.X scores

                                                                          Fixes

                                                                          • Properties were not saved properly in a number of cases
                                                                          • Layout was broken after operations with measure rests and tuplets
                                                                          • Time signatures appeared incorrectly in some cases and might lead to crash
                                                                          • Using the implode tool on notes connected with slurs led to crashes
                                                                          • Editing a barline was applied incorrectly
                                                                          • Context menu on instrument names didn't appear
                                                                          • Pages with landscape orientation were cropped when printing
                                                                          • Playback went crazy on saving
                                                                          • Tempo was applied incorrectly in certain cases involving fermatas
                                                                          • Slurs were lost or detached in some cases
                                                                          • Autoplacement couldn't be switched off for stems and arpeggio

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Playback

                                                                          • #279203: MIDI Input / Output doesn't work
                                                                          • Fix incorrect fermata stretching and tempo changes
                                                                          • Fix playback glitches when saving score

                                                                          Layout and automatic placement

                                                                          • #280710: Tied notes not added correctly in part other than first
                                                                          • #280350: Multimeasure rests extend into other measures, through other parts of the score
                                                                          • #280422: Hairpins should align with start/end dynamic
                                                                          • #151256: Long lyric syllables at end of measure can overlap first syllable of next
                                                                          • #279585: Frame gap wrong in score imported from v2
                                                                          • #281327: Measure Numbers and Section Break
                                                                          • #280383: Edit handles for tie appear above wrong staff
                                                                          • #279643: Cross-staff arpeggio placement
                                                                          • #280677: Autoplacement won't allow a stem crossing staves

                                                                          UI/UX

                                                                          • #280749: Chords in french notation are not formated correctly if accented letter expected
                                                                          • #280749: Tool tips for key signature in the new score wizard or master palette don't show accidentals
                                                                          • #280749: Width of new Mixer
                                                                          • #279814: Allow instrument name change by double or right-clicking name in score
                                                                          • #278939: Shift / Control and dragging an element does not work (drags the score instead)
                                                                          • #279622: All ottavas in the palettes are 8va
                                                                          • #280234: The message box of exporting WAV stuck on saying 0% before finishing
                                                                          • #276194: It should be possible to re-init MIDI IN after plugging in new MIDI keyboard
                                                                          • Redesigned New Score Wizard
                                                                          • Made Mixer panel dockable and floatable
                                                                          • #280538: Some Tours strings show up as untranslated
                                                                          • #280908: Landscape PDF cropped on the right side
                                                                          • #280850: Articulations dialog: no reset buttons etc.

                                                                          Commands/Properties

                                                                          • #279377: Image capture renders text wrong size for some users
                                                                          • #280522: TextEdit edit mode lost after undo...shouldn't be deselected
                                                                          • #280666: Disable mouse drag ability for Measure Rests because they can't be easily laid out while dragging
                                                                          • #280715: Identical subsequent notes disappear on MIDI input
                                                                          • #281432: Placement of lines set by "X" command lost on save/reload
                                                                          • #279373: Ottava placement is always reset to "Below" on resetting to style
                                                                          • #279033: Expression text badly placed by default, placement not saved
                                                                          • #281312: Lines with manual adjustment in 2.x displaced horizontally on import
                                                                          • #280609: Dynamics placement above/below not remembered after importing MuseScore 2 file
                                                                          • #280400: Staff text unexpectedly repositions when "Set to style" is pressed for different element
                                                                          • #280631: Autoplacement cannot be turned off for pedals
                                                                          • #281350: [Feedback form] Start repeat barline changes applied to a barline go to the previous barline
                                                                          • #280523: Switch size changes with staff space settings does not affect styles individually
                                                                          • #281720: Images read with incorrect size 2.x->3.0

                                                                          Corruptions and/or loss of data

                                                                          • #280574: Corruption when deleting and selecting beats with two instruments
                                                                          • #280547: tuplet brackets connected to two staves, moved up a staff, causing score corruption and crashes
                                                                          • #280640: Attaching grace note to first note of triplet corrupts score
                                                                          • #281321: Create irregular measures from second measure and followings results in corruption

                                                                          Crashes

                                                                          • #280775: Crash if inserting rehearsal mark on a multimeasure rest
                                                                          • #280771: Crash on adding notes in voice 2 using MIDI or piano keyboard input
                                                                          • #280690: Editing slur in a score with parts leads to crash
                                                                          • #281130: Crash of MuseScore 3 on opening a certain 2.x score
                                                                          • #281175: Removing rests attached to slurs in a voice >1 causes a crash
                                                                          • #280817: Implode tool crashes if two voices and a slur in Voice 2
                                                                          • #280814: Crash when adding new time signature in the measure of a clef change
                                                                          • #280830: Time signature replacement crashes if double-clicking first on it
                                                                          • #280714: Crash by removing instruments with parts in a certain configuration
                                                                          • #280623: Change a preference or workspace from a MIDI file results in crash
                                                                          • #280668: Removing note line 3 of organ crashes MS3
                                                                          • #280503: Copy-paste tremolo with slur causes crash
                                                                          • #281573: New Score Wizard crashes if "Done" is pressed when "Choose Instruments" is selected
                                                                          • #281761: Adding interval to note in parts leads to crash
                                                                          • #281068: Regression - All accidentals in Edit mode crash the program
                                                                          • #281020: Slurs settings and saving added instruments lead to crash
                                                                          • #281411: Lyrics: select all and reset causes program to freeze
                                                                          • #281504: Swap 4/4, C or Cut time if there is another time signature further in the score crashes the program. Also happens when changing from 4/4 to 2/4
                                                                          • #281154: Crash with first note of measure set to beam middle and nothing to beam to
                                                                          • #281761: Adding interval to note in parts leads to crash

                                                                          Miscellaneous

                                                                          • #281146: Add "User" text styles to Inspector dropdown for fingering
                                                                          • #280632: Add shaker, fix tubo instrument
                                                                          • Add more channels to instruments

                                                                          Release notes for MuseScore 3 (December 24, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.0.20137, Windows: 3.0.0.4785, AppImage: 3.0.0 (revision: c1a5e4c) 24.12.2018 https://musescore.org/en/3.0

                                                                          MuseScore 3.0 was released December 24, 2018.


                                                                          MuseScore 3.0 is packed full of new features and improvements.

                                                                          Musical notation

                                                                          • Automatic placement - potential collisions between elements are detected and resolved automatically, allowing you to easily create great-looking scores with little need for manual adjustment
                                                                          • Improved parts facility - link parts to specific voices within a staff
                                                                          • System dividers - automatically generate dividers between systems
                                                                          • Staff type changes - change staff size, number of lines, and other properties mid-score
                                                                          • Temporary and cutaway staves - staves may appear and disappear as needed, including the ability to have empty measures be completely invisible
                                                                          • MuseJazz font - give all elements in your scores a handwritten appearance
                                                                          • Named noteheads - automatically display pitch names in noteheads using a variety of different naming schemes

                                                                          Usability

                                                                          • Tours - get online help automatically as you need it
                                                                          • Timeline - navigate using a graphical overview of the music structure of your score that shows rehearsal marks, changes of tempo, key, and time signature, etc.
                                                                          • Score comparison tool - easily view differences between versions of a score
                                                                          • Single page mode - vertically scrolling view of your score
                                                                          • Improved Inspector - control more element properties and set style defaults directly from the Inspector window, including new above/below placement settings
                                                                          • Palette search - enter a search term to quickly find any symbol
                                                                          • Timewise note input and editing - insert and deletes notes and rests within measures, automatically shifting subsequent music forwards or backwards
                                                                          • Next/previous element - Alt+Right/Left shortcuts to navigate through each element of your score
                                                                          • Auto-update - no longer necessary to download and install new versions from musescore.org

                                                                          Playback

                                                                          • Improved Mixer - mute individual voices, collapse channels into a single column, assign MIDI ports and channels
                                                                          • Improved Piano Roll Editor - easier control of the playback parameters of each note in your score
                                                                          • Redesigned Play Panel - docked within main window

                                                                          Release notes for MuseScore 3 Release Candidate (December 22, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.0.20100, Windows: 3.0.0.4747, AppImage: 3.0.0 (revision: 96c1f7b) 22.12.2018 https://musescore.org/en/3.0rc

                                                                          Highlights

                                                                          Improvements

                                                                          • Ability to rename custom text styles
                                                                          • More intelligent layout of articulations, slurs, and hairpins
                                                                          • Improved rendering of various UI elements
                                                                          • New tours
                                                                          • New demo scores

                                                                          Fixes

                                                                          • Over a dozen crashes fixed
                                                                          • Bugs involving clefs
                                                                          • Bugs involving key and time signatures
                                                                          • Bugs involving automatic placement
                                                                          • Bugs involving tremolo
                                                                          • Restored ability to move text elements with cursor keys

                                                                          List of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Crashes

                                                                          • #279829: Crash caused by incorrect mapping of voices between parts and master score
                                                                          • #279509: Removing a staff from the score in the instrument menu (Key-i) crashes
                                                                          • #279761: Time signature crash
                                                                          • #280215: Remove brackets leads to crash
                                                                          • #279570: Crash when removing added time signature if subsequent tie and rest in next measure
                                                                          • #280186: Reducing font size to 0 in Inspector causes crash
                                                                          • #279988: Crashing marking instruments invisible with hide empty staves enabled
                                                                          • #279693: Adding a tuplet to a non-top staff Part in Score+Parts causes crash
                                                                          • #280095: Crash on part generation in the presence of tremolos
                                                                          • #280012: Crash opening vtest/tremolo-1.mscx
                                                                          • #276976: Crash on clicking on some measures in a corrupted score
                                                                          • #140296: Crash on Linux on export to PDF when selecting an existing and sufficiently complicated file on trying to preview it
                                                                          • #279805: Changing instrument in the mixer crashes the application
                                                                          • #280347: changing a (staff/part/system) bracket's column (via Inspector) causes crash
                                                                          • #280345: Crash on undoing removal of time signature
                                                                          • Fixed the crash on creating new workspace with GUI Preferences
                                                                          • #279229: Piano roll editor: adjustment issues, including crash
                                                                          • #280364: Launch Timewise Input Mode causes crash

                                                                          Corruptions and loss of data

                                                                          • #279096: Key signature added in measure that was previous at start of system does not appear
                                                                          • #279609: Inserting measure before measure previously at start of system displays spurious key signature
                                                                          • #279962: Ottava 8vb displays as 8va on save/reload
                                                                          • #279897: Setting “Custom Tablature” in Instruments windows results in standard staff
                                                                          • #276295: Save selection defaults to 4/4 time signature, but no display
                                                                          • #280370: Bad key signature insert on switch to concert pitch after inserting measures
                                                                          • #279676: Clefs after mmrests do not appear at first, are laid incorrectly after reload, are not linked to underlying measures, and can't be deleted
                                                                          • #279183: Adding time signature to measure with clef changes produces notes on wrong lines
                                                                          • #280092: Insert measure leaves clefs
                                                                          • #280435: Text moved by cursor still considered "styled" and thus not saved

                                                                          Layout and automatic placement

                                                                          • #280055: Autoplaced chord symbol does not reset when adjustment no longer needed
                                                                          • #278490: Lines placed above the top staff when single note selected
                                                                          • #280140: First notes in bars are too close to start repeat, key signature
                                                                          • #280160: Disabling autoplace for image does not remove it from autoplacement
                                                                          • #280208: Hairpin should not cross barline by default
                                                                          • #280094: Time signature does not always update in score
                                                                          • #279880: Slurs do not move outside articulations if there is room to thread them through (most important tweaks)
                                                                          • #278975: Key signature continues to be applied after section break
                                                                          • #279832: Subtitle wrongly positioned in imported 2.x scores
                                                                          • #164786: crescendo/diminuendo lines take vertical height from hairpin settings rather than dynamics text settings
                                                                          • #118636: Tablature beam not drawing correctly in Full or Common Tablature staff
                                                                          • #280220: Slurs not allowed to cross barlines, leading to placement far from notes
                                                                          • #279952: Horizontal placement issue with the new L H Guitar Fingering
                                                                          • #280214: Text style settings ignored when generating parts - all offsets at 0
                                                                          • #280223: Flags don't place properly with slash notation
                                                                          • #279110: Staff spacer fixed down malfunction with invisible staves
                                                                          • #279543: Repeat barlines in palette and when using Bravura in score too have their dots too low
                                                                          • #280033: Timeline: Repeat Measure bar displays as empty bar
                                                                          • #278964: Tremolo copy & paste results in wrong note types
                                                                          • #280366: Volta laid out incorrectly in measure with disabled header segments
                                                                          • #280414: "Short" and "tick" barlines in palette result in incorrect span

                                                                          Commands

                                                                          • #276153: Select>more... by subtype does not work to select by text style
                                                                          • #276461: Custom text styles in previous versions of MS changed to User-1, User-2, etc
                                                                          • #279563: [MacOS X] Export Pdf with Muse Jazz Text all garbled and unreadable
                                                                          • #278132: Settings of fretboard diagrams are lost in palettes (style issue)
                                                                          • #273302: Fermata loses assignment to voice and direction
                                                                          • #278128: moving elements with cursor keys

                                                                          UI

                                                                          • #280049: Bad English in Mixer
                                                                          • #280162: Improve language and formatting of Style Tuplets dialog
                                                                          • #280149: Default height of Style dialog box truncates Dividers info
                                                                          • #280238: Reorder sections of Style dialog
                                                                          • #280048: Applying changed preferences restores default UI
                                                                          • #280111: Selection in Piano Roll Editor not respecting modifier keys
                                                                          • #278236: Master Effects: Changes to "Effect A" or "Effect B" do not activate the "Load Default" button
                                                                          • #279495: "Draw antialiased" is unchecked in some cases which leads to sharped curves rendering
                                                                          • #279887: "Waves" of glissando symbol are badly defined
                                                                          • #280274: Start window and template chooser do not react to scrolling with mouse wheel or trackpad (Mac)
                                                                          • #279791: Mixer displays Zerberus patch names even though Fluid is being used
                                                                          • #280330: Heading in Stem inspector should be bold, left aligned and collapsable
                                                                          • #280210: Menu entry and dialog box title bar out of sync with each other
                                                                          • Fixed low quality splash screen on high DPI displays
                                                                          • Fixed non native Startup and New Score Wizards appearance
                                                                          • Fixed non native buttons positions in the tours widgets
                                                                          • Removed "Don't break" from the palettes

                                                                          Miscellaneous

                                                                          • #280137: Selecting measure in part doesn't play from measure
                                                                          • #280013: New vtests for layout sequence
                                                                          • Updated and improved demo scores

                                                                          Release notes for MuseScore 3 Beta Update (December 14, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.0.19874, Windows: 3.0.0.4516, AppImage: 3.0.0 (revision: 59a11cd) 14.12.2018 https://musescore.org/en/3.0beta3

                                                                          Highlights

                                                                          Improvements

                                                                          • Significant autoplace improvements to follow standard engraving practice
                                                                          • Further improvements in import of scores from MuseScore 2
                                                                          • Better support for AZERTY keyboards

                                                                          Fixes

                                                                          • Many crashes fixed, especially for macOS
                                                                          • Fixes for "Save online"
                                                                          • Fixes for playback tempo issues
                                                                          • Fixes for playback and audio export of parts
                                                                          • Fixes for linked parts and staves
                                                                          • Fixes for page layout
                                                                          • Fixes for text editing
                                                                          • Fixes for layout of slurs, pedal, hairpins, and other elements
                                                                          • Fixes for CJK character support
                                                                          • Fixes for workspace and palette customization

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Crashes

                                                                          • #279662: Crash adding articulation to multiple notes
                                                                          • #279521: Crash when switching to continuous view on a particular score
                                                                          • #279531: Changing to unsused voice in re-pitch mode causes crash
                                                                          • #278772: [MacOSX] Crashes randomly when go to do any menu item
                                                                          • #279827: Editing a note and revert to two staves after deleting one leads to a crash
                                                                          • #279172: Crash opening score that works in version 2
                                                                          • #279448: Three different crashes
                                                                          • #278485: Frames: Inserting measures causes a crash
                                                                          • #278918: MIDI export of a part crashes
                                                                          • #279284: Exporting a part to MP3, WAV, MusicXML, FLAC crashes
                                                                          • #279141: Moving staves up after adding new instrument causes crash to desktop
                                                                          • #280006: Crash on SVG export for particular score

                                                                          Corruptions and loss of data

                                                                          • #278770: Linked staves not linking after copy/paste into linked tablature staff
                                                                          • #277786: Instrument change transposition ignored in scores imported from 2.x
                                                                          • #279065: Manual adjustment to system divider (including making invisible) lost on save
                                                                          • #279874: Copy paste tuplet across barlines causes corruption
                                                                          • #120271: Part updated incorrectly after insert note in score
                                                                          • #279782: Linked staves become not linked if part is removed
                                                                          • #179736: Deleting a barline in main score will not delete the barline in parts
                                                                          • #279774: x-offsets applied to even lyrics lines don't stick (don't survice save/close/open)
                                                                          • #279700: Corruption and bad links using exchange voices on score with parts

                                                                          Layout and automatic placement

                                                                          • fix update for preview in page settings (issue?)
                                                                          • #279343: Adding bracket in a system doesn't expand in other systems
                                                                          • #279464: Error opening file created in 2.3.2
                                                                          • #279144: Autoplace for pedal results in lines not aligning within system
                                                                          • #279239: Continuation line overlaps continuation text
                                                                          • #275379: Segno symbol collides with measure number text 2.X->3.0
                                                                          • #277813: There is no option to change continuation text for (de)crescendo lines
                                                                          • #279533: Edited tie hard to select, resets to default on next layout
                                                                          • #269036: CJK characters are not appearing at all
                                                                          • #278068: Newline dropped in texts
                                                                          • #279340: Slurs not correctly continuing over multiple system breaks
                                                                          • #279554: Measure Numbers gone wild
                                                                          • #278921: Page settings preview broken in score imported from version 2.3.2
                                                                          • #278024: Tenor and bass drum definitions missing notehead info
                                                                          • #279544: dynamics above's y-offset match harpins above y-offset so they align
                                                                          • #277500: Manually adjusted dynamics too low on import from 2.x without reset
                                                                          • #279198: Auto-place doesn't ignore horizontal invisible elements
                                                                          • #279310: System text ignored during autoplace when top staff hidden
                                                                          • #278865: Instrument change added via double-click while in continuous view does not appear in score
                                                                          • #279510: Pedal marks are still visible when set to invisible
                                                                          • #279119: Radius for frame doesn't scale with size; more rounded than in 2.x
                                                                          • #279070: Measures with tremolo get wider and wider with each edit
                                                                          • #276235: System text from 2.3.2 imported as staff text (preventing to hide otherwise empty staff)
                                                                          • #279367: First system on a page may not fit to the page
                                                                          • #278068: Newline dropped in texts
                                                                          • #279080: Beaming over rests makes stems too long
                                                                          • #279789: Bad slur shape on certain combination of notes
                                                                          • #279777: Slur positioning bad in tight spacing
                                                                          • #274208: Slur too high with accidental
                                                                          • #279607: Articulation mark on first note of a group, or a solo beam is off. Stems pointing up
                                                                          • #279391: Text will not go underneath volta
                                                                          • #279995: In linear view the voltas are layouted twice
                                                                          • #279772: Chord symbols messed up on import 2.x => 3.0
                                                                          • #279950: Chord symbol autoplace doesn't work for beamed notes
                                                                          • #279804: Chord symbol moving unexpectedly
                                                                          • #279666: Chord symbol "warning color" issues and lack of automatic reversion

                                                                          Commands

                                                                          • #279572: Can no longer disable "size changes with spatium" in text styles
                                                                          • #279062: Hide when empty: Instrument does not work (acts same as Auto)
                                                                          • #278505: ABC Import plugin not working
                                                                          • #278490: Lines placed above the top staff when single note selected
                                                                          • #143841: Custom Chord bug

                                                                          UI

                                                                          • #279084: MuseScore 3 doesn't work with azerty keyboard
                                                                          • #279503: UI font is changing without notice
                                                                          • #279622: All ottavas in the palettes are 8va
                                                                          • #276456: Moving soundfont in soundfont selector creates duplicate list entries
                                                                          • #279156: Updating translations changes workspace from Advanced to Basic
                                                                          • #278881: Restore buttons for muting individual voices within a staff
                                                                          • #279610: Dragging to reposition a symbol ("Z" palette) responds erratically on release
                                                                          • #279054: Can't move elements of palette around, despite editing being enabled
                                                                          • #276118: Part names are not saved when using "New"
                                                                          • #278693: Piano Roll Editor: On time display cannot show negative values

                                                                          Playback

                                                                          • #279202: cant play from selection when going to part view
                                                                          • #278153: Continuous View: Volta changes Tempo of Playback

                                                                          Miscellaneous

                                                                          • #279328: Beta Update Save Online Hangs When Uploading Custom Audio
                                                                          • #278900: Icon licences

                                                                          Release notes for MuseScore 3 Beta Update [MacOS <10.12] (December 11, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS 10.10+: 3.0.0.19782 (revision: 1f7a1f8) 11.12.2018

                                                                          The recent version of Qt doesn't support MacOS versions lower than 10.12. We built the package with the previous LTS version of the Qt and made MuseScore 3 available for MacOS 10.10+ versions, too. Btw, this package worked incorrectly and crashed all the time. This update fixes the reason of the crash:

                                                                          Crashes

                                                                          • #278772: [MacOSX] Crashes randomly when go to do any menu item

                                                                          Release notes for MuseScore 3 Beta Update (December 7, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS 10.12+: 3.0.0.19686, Windows: 3.0.0.4328, AppImage: 3.0.0 (revision: 2b25396) 07.12.2018 https://musescore.org/en/3.0beta2
                                                                          MacOS 10.7-10.11: 3.0.0.19704 (revision: e96bb91) 08.12.2018 https://musescore.org/en/3.0beta2

                                                                          Highlights

                                                                          Improvements

                                                                          • New mixer UI
                                                                          • Save Online fully functional
                                                                          • More intelligent autoplacement
                                                                          • Improved import of scores from older versions
                                                                          • Improved font processing on Windows
                                                                          • Staff names reflect mid-score instrument changes
                                                                          • Added items to Tools menu to access commands for deleting, splitting, and joining measures

                                                                          Fixes

                                                                          • Many crashes fixed!
                                                                          • Bugs in autoplacement
                                                                          • Bugs in text styles
                                                                          • Bugs in undo/redo operations
                                                                          • Bugs in page layout
                                                                          • Bugs in layout of chord symbols, ties, slurs, lines, glissandi, and more
                                                                          • Bugs in linked staves
                                                                          • Bugs involving "jumping" score view
                                                                          • Bugs in tuplet selection
                                                                          • Bugs in editing multimeasure rests
                                                                          • Bugs in transposition
                                                                          • Bugs in timewise delete command
                                                                          • Bugs in implode/explode commands
                                                                          • Bugs in images and image capture
                                                                          • Bugs in swing playback

                                                                          Complete list of issues resolved

                                                                          Here is a complete list of the issues resolved in this update:

                                                                          Crashes

                                                                          • #278526: Crash on "split staff" operation
                                                                          • #278853: Crash trying to copy tuplet across barline
                                                                          • #278874: Open Format -> Style leads to crash
                                                                          • #278499: Crash on change sound for channel added via instrument change
                                                                          • #279386: Crash when pasting measures if number > to the last mm rest
                                                                          • #279456: Segfault when selecting multi-measure rest and applying section break
                                                                          • #279386: Crash when pasting measures if number > to the last mm rest
                                                                          • #278866: Staff type change leads to crash
                                                                          • #276978: [GP] crash during open .gpx file
                                                                          • #276667: [GP] Crash on layout of harmony belonging to fret diagram
                                                                          • #269927: [MusicXML import] crash when importing file with fermata
                                                                          • #87241: Persistent bug when changing Instrument names - crashes and wipes savedfile
                                                                          • #275133: Crash when entering notes after swap with clipboard and undo
                                                                          • #224031: Crash by undoing the removal failure of the repeats palette symbols separating multimeasure rests
                                                                          • #279064: Crash saving score with system divider selected
                                                                          • #279369: Crash on undoing of cutting a multiline text
                                                                          • #279172: Crash opening score that works in version 2
                                                                          • #276227: MusicXML import causes corruption, attempts to fix causes crash
                                                                          • #279063: Crescendos display under single note when they end at a system break, crash on edit
                                                                          • fix multiple crashes when accessing menus and UI on MacOSX 10.14

                                                                          Corruptions and loss of data

                                                                          • #279099: Dotted tuplet has incorrect duration after save/reload
                                                                          • #279175: Chord symbols entered into score not parsed in parts
                                                                          • #279252: Edits to chord symbols not linked
                                                                          • #279351: Funny notes after Implode and switching to Written Pitch
                                                                          • #279280: Setting to a tempo text to be not bold is not saved
                                                                          • #248891: Chord symbols transposed incorrectly between concert score & transposed parts
                                                                          • #279215: Time wise delete causes corruption in measures with measure rest
                                                                          • #279077: Align verse numbers is lost after closing score

                                                                          Layout and automatic placement

                                                                          • #277956: Extra initial clef in scores imported from 2.x
                                                                          • #277995: Tempo markings are out of position
                                                                          • #277721: Dashes and melismas not displayed in continuous view
                                                                          • #276164: Elements ignored by autoplace algorithm
                                                                          • #277358: Layout of figured bass is broken
                                                                          • #278039: Parentheses (from Master palette > Symbols) reset to default positions or lost altogether
                                                                          • #278057: "Hide empty staves" hides non-empty staves when first measure is empty
                                                                          • #277666: Space for instrument name of hidden staff is reserved
                                                                          • #278471: Fingering is shown in tablature even when "Show fingering" is OFF
                                                                          • #279240: Systems can overlap (by same amount that staves don't)
                                                                          • #278896: Invisible system text should not break multi-measure rests
                                                                          • #279259: Chord symbol spacing issues
                                                                          • #279176: Removing check from line visible has no effect
                                                                          • #122561: Tablature rests are not visible, then badly positioned
                                                                          • #276566: [Windows] underline too close to (lyrics) letters
                                                                          • #278783: Parts of score fall off page or are shown twice after adjusting stretch
                                                                          • #279220: Chord symbols overlap barlines
                                                                          • #278907: First note of measure placed way too close to system header, if note is above staff
                                                                          • #88861: Option for editing abbreviated staff names in instrument changes
                                                                          • #279176: Removing check from line visible has no effect
                                                                          • #278940: Glissando line gets squashed horizontally
                                                                          • #279415: Winged repeats at bottom of barline span if last staff invisible
                                                                          • #279292: Slurs and Ties: Autoplace minimum distance has no effect
                                                                          • #279484: Entering note in pickup measure displays before clef
                                                                          • #278916: Numbers only option has no effect on ottava display
                                                                          • #278912: Style not passed to trill lines
                                                                          • #278937: Hairpin: vertical offset has changed dramatically, horizontal offset less so
                                                                          • #277706: Text lines: manually-adjusted "Vertical offset" has been lost
                                                                          • #278366: Slides: user positions set in 2.x are lost
                                                                          • #278314: Tremolo positioned incorrectly for small chords
                                                                          • fix chord stem width for scaled staves
                                                                          • #278862: Chord symbol collisions not handled well
                                                                          • #277367: invisible notes and rests remain part of the skyline
                                                                          • #277705: Chord symbols: "Default vertical position" has been lost
                                                                          • #278038: System collisions
                                                                          • #277759: Chord symbols sometimes add (much) too much space to measure
                                                                          • Improved hyphen horizontal spacing

                                                                          Commands

                                                                          • #278752: Add tied note by keyboard fails when notes are already present
                                                                          • #278383: images can't be moved with mouse
                                                                          • #278979: Issue in step-time mode
                                                                          • #276497: Image capture: artefacts when selecting tablature
                                                                          • #279009: Cut text within staff text hangs program; copy/paste doesn't work
                                                                          • #278943: Can't copy tuplet to last beat of measure
                                                                          • #34426: Copy paste issue with lyrics and TAB
                                                                          • fix slurs editing and offset
                                                                          • #278118: Images can't be add to measures or remains sticked in frames

                                                                          UI

                                                                          • #276716: Instrumentation not showing in continuous view
                                                                          • fix handling of custom formatted text and values in inspector
                                                                          • #278031: Note entry highlighter doesn't move when switching from Continuous view to Page View
                                                                          • Tours being not shown on closing start center via F4 shortcut
                                                                          • #277710: text line symbol in lines palette isn't displayed properly
                                                                          • #278873: GUI preferences with custom workspace not saving/loading after change
                                                                          • #19185: 'Professional' range for instrument 'Alto recorder' is incorrect
                                                                          • #279073: Chord symbols entered on pages >1 do not appear while typing
                                                                          • #279165: Fingering palette: correction
                                                                          • #279067: Format/Style... System tab Brace settings have no units
                                                                          • #276135: Right mouse click shouldn't open context menu in Note Input mode
                                                                          • #278230: Looking at staff properties changes clef of instruments with multiple staves
                                                                          • #278971: [MacOSX] Help/Revert to factory settings is missing
                                                                          • #278967: Mac: Factory reset alert when accessing preferences (German localisation)
                                                                          • #276668: missing entry "Swing" in Palette "text"
                                                                          • #278949: Orchestral template names need to be clearer
                                                                          • #278968: Mixer Volume Slider glitch
                                                                          • #114366, #279389, #278051: Add "Delete Selected Measures" command to context menu
                                                                          • #279432: Right-click menu on palette items seems dead
                                                                          • #277723: Paste in page view jumps to top of page
                                                                          • #279465: Selection extends beyond intended tuplet element
                                                                          • #279429: Inspector: need to embolden section headings
                                                                          • #278320: Tablature staves reported as standard in Instruments dialog
                                                                          • #278894: Provide button to hide detail area in mixer

                                                                          Miscellaneous

                                                                          • #278860: Jazz templates outdated
                                                                          • #279303: Update chord symbol style defaults
                                                                          • #278948: Concert pitch is on by default for template Classical Orchestra
                                                                          • #278897: High CPU load while the mixer is open
                                                                          • #279023: "Save online" doesn't work
                                                                          • #279499: Cannot cancel MP3 export
                                                                          • update Bravura font to 1.272
                                                                          • update to Qt 5.12 (so far for Mac only, with the bad side effect that it no longer runs on macOS <10.12)

                                                                          Release notes for MuseScore 3 Beta Update (December 3, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS: 3.0.0.19499, Windows: 3.0.0.4133, AppImage: 3.0.0 (revision: 0526317) 03.12.2018
                                                                          • Fix #278970: Preferences/Shortcuts not shown (and so not changable)
                                                                          • Add "Save Online..." to the menu
                                                                          • Fix #279012: Updating translations doesn't work

                                                                          Release notes for MuseScore 3 Beta (November 28, 2018)

                                                                          Build number Date Announcement
                                                                          MacOS: 3.0.0.19385, Windows: 3.0.0.4020, AppImage: 3.0.0 (revision: 7694abc) 28.11.2018 https://musescore.org/en/3.0beta

                                                                          As a major new release, MuseScore 3 contains some very significant and exciting new features and improvements over MuseScore 2.3.2 and older versions:

                                                                          Improved score layout

                                                                          • Automatic placement, layout, and spacing means your scores are ready to print with almost no manual adjustments required
                                                                          • Generate parts from individual voices so you can combine instruments on a single staff
                                                                          • Take control of your layout with manual overrides, above/below placement settings, temporary and cutaway staves, mid-score staff type changes, and more

                                                                          New notation features

                                                                          • Handwritten font for music notation
                                                                          • Noteheads with pitch names
                                                                          • Automatic system dividers
                                                                          • New articulations, expression text, clefs, accidentals, augmentation dots, capo changes, and more

                                                                          Improved usability features

                                                                          • Tours to provide help as needed
                                                                          • Timeline and single page view for easier score navigation
                                                                          • Score comparison tool to identify differences between versions
                                                                          • Timewise insert and delete to provide more editing freedom
                                                                          • Search facility to help you find palette elements
                                                                          • Improved Style and Inspector tools for control over appearance and behavior of score elements

                                                                          Improved playback controls

                                                                          • Improved Mixer for easier control of instrument sounds
                                                                          • Improved Piano Roll for fine control of individual notes
                                                                          • Improved Play Panel for faster access to playback controls

                                                                          New autoupdate facility for Windows and MacOS

                                                                          A brand new autoupdate engine has been developed and included in MuseScore 3 Beta. Keeping up to date with new releases no longer requires you to manually go find and download them. Just let the autoupdater handle downloading and installing of the new version for you! Receiving our latest bugfixes and features has never been easier.

                                                                          Note, the autoupdater uses your OS locale which means that the language of the autoupdater interface will always be the same to your OS language.

                                                                          Release notes for MuseScore 2.x

                                                                          Release notes for MuseScore 2.3.2 (July 31, 2018)

                                                                          After the release of MuseScore 2.3.1 on July 6th 2018, we found a couple of regressions that we addressed in MuseScore 2.3.2, released on July 31st 2018. We also updated all languages to latest translations.

                                                                          Features

                                                                          • #208006: Embed MP3 support by default on macOS
                                                                          • Add access to MuseScore version and revision used to create a score in plugin framework

                                                                          Improvements

                                                                          • #274258: Zerberus: add support for "global_volume=" opcode
                                                                          • #274396: Zerberus (SFZ) instruments are too quiet compared to SoundFont instruments

                                                                          Fixes

                                                                          • #12971: Same note in different voices and lengths plays only the length of the shortest note
                                                                          • #197716: Pending issue with uploading score audio
                                                                          • #271236: "Line visible" property not honored on screen for text lines
                                                                          • #274026: Unable to save synth settings in two scores in the same session
                                                                          • #274204: Regression: Ambitus causes a crash just while clicking on it
                                                                          • #274309: "Regroup Rhythms" crashes the program if measures contain Measure repeat symbols
                                                                          • #274432: Regroup rhythms does not work if the expected notes are shorter than the initial notes
                                                                          • #274558: Crash when adding MDL instruments
                                                                          • #274659: Crash on adjust measure duration in part
                                                                          • #274803: MDL Workspace Not Displayed After Installation
                                                                          • Disable "Upload Score" menu item while uploading custom audio, to prevent uploading different scores at the same time with slow internet connection speed.

                                                                          See also the Release notes for MuseScore 2.3.1 and MuseScore 2.3.

                                                                          Release notes for MuseScore 2.3.1 (July 6, 2018)

                                                                          After the release of MuseScore 2.3 on June 29th 2018, we found a couple of regressions that we addressed in MuseScore 2.3.1 released on July 6th 2018. We also updated all languages to latest translations.

                                                                          Bug Fixes

                                                                          • Fix #273921: [Regression] Augm. dot misplaced for low stemless notes
                                                                          • Fix #273837: MDL install failure on Linux
                                                                          • Fix #273996: Crash when exporting audio with Zerberus sounds (MacOS only)
                                                                          • Fix #273973: Playback cursor disappears after splitting then restoring the display

                                                                          See also the Release notes for MuseScore 2.3.

                                                                          Release notes for MuseScore 2.3 (June 29, 2018)

                                                                          MuseScore 2.3 was released June 29, 2018.

                                                                          New features

                                                                          • #273032: Implement extensions to provide an easy way to install soundfont, templates and instruments.xml
                                                                          • #256021: Add buzz roll tremolo stem
                                                                          • #271198: Add a more flexible way to choose noteheads in drumset for percussion instrument
                                                                          • #271723: Implement filters in Zerberus
                                                                          • #272276: Add ability to have a different MIDI pitch for drum instrument based on articulation or tremolo
                                                                          • Implemented flams and crush notation for unpitched percussion

                                                                          Playback

                                                                          • Fix #270996: No sound on upgrade to 2.2 if default soundfont was saved as default
                                                                          • Fix #271717: Match the default tempo in New Score Wizard
                                                                          • Fix #272377: 'Follow text' is not applied to tempo text

                                                                          Zerberus

                                                                          • Fix #222031: remove ties and spanners when removing induvidual notes within a chord
                                                                          • Fix #271718: clicking noise fix
                                                                          • Fix #271719: sound accumulation on noteOff
                                                                          • Fix #271722: long release samples do not play in their entirety
                                                                          • Fix #272687: Unable to select an SFZ playback for a drum instrument
                                                                          • Fix #273150: incorrect off_by processing
                                                                          • Fix #273241: incorrect loading sample when use comment line

                                                                          User interface

                                                                          • #273511: Order notes in Drum Input Palette like in instruments.xml
                                                                          • #269952: Allow new templates to be seen without restart
                                                                          • Follow macOS platform conventions for window title and dirty state
                                                                          • Use setWindowModified to display * in window title
                                                                          • Fix #8808: Add option to limit scroll area of the navigator and the score view
                                                                          • Fix #117236: Honor 'pan score' button during edits
                                                                          • Fix #153691: Drumtools palette not closing when switching between files
                                                                          • Fix #268016: No message on second keyboard shortcut already in use
                                                                          • Fix #271074: Image capture with transparent background empty when pasting into other programs on Windows (reverted Fix #209596: Screencapture + Copy + Transparency issue)
                                                                          • Fix #271935: Wrong voice button is highlighted after unsuccessful voice change
                                                                          • Fix #273672: Right align "Double augmentation dot" in preferences dialog
                                                                          • Fix #272153: Notes for transposing instrument are shown in concert pitch on piano control

                                                                          Crashes and corruptions fixed

                                                                          • Fix #76751: MuseScore crashes when opening plugin manager after adding new plugin
                                                                          • Fix #270850: Changes to a score cause all fermatas over a barline to be discarded
                                                                          • Fix #271039: crash when closing score after changing tempo in play panel
                                                                          • Fix #271161: crashes on certain tuplets due to failure to sanitize
                                                                          • Fix #271299: Errors with multiple clefs
                                                                          • Fix #271325: Adjusting a note outside the range of a piano causes a crash when the piano keyboard is visible.
                                                                          • Fix #272172: Remove tuplets after inserting measures causes corruption/crash
                                                                          • Fix crash in MusicXML import when drumset instrument has no midi-unpitched

                                                                          Score layout

                                                                          • Fix #253926: Key signature not displaying correctly on clef change at the start of a score
                                                                          • Fix #267602: Measure shifts back and forth with each layout
                                                                          • Fix #269404: Line/Ottava Text properties do not apply user-defined vertical offsetting properly
                                                                          • Fix #271187: Bad canvas position when operating near right margin with vertical stacking
                                                                          • Fix #271450: Double-click to set breaks on frames
                                                                          • Fix #271529: Incorrect stem position for some noteheads in layout
                                                                          • Fix #272023: Downstem mirrored notes lose accidental
                                                                          • Fix #272066: Canvas improperly positioned when setting zoom level
                                                                          • Fix #272390: Measure numbering by interval should take 1st measure number into account
                                                                          • Fix #272691: No naturals in key sig after mmrest
                                                                          • Fix #273555: Checking "Show first" with an interval of 1 for measure numbers only shows measure number 1
                                                                          • Fix #273305: Courtesy clef hide/show issue

                                                                          Instruments

                                                                          • Reworked instruments.xml
                                                                          • Fix #271103: Add 7-string guitar and Cavaquinho (4-strings guitar)
                                                                          • Add missing 5-string staff type, append 7- and 8-string tablature types
                                                                          • Don't show presets for more strings than the instrument is set up for, esp. counting only fretted strings, i.e. non-open strings

                                                                          Import/Export

                                                                          • Fix #271707: MusicXML export: crash when exporting hairpins
                                                                          • Fix #271840: MusicXML import: no barlines when using property
                                                                          • Fix #272062: Opening of some MusicXML files caused MuseScore to crash

                                                                          Miscellaneous

                                                                          • Fix #270496: Add missing elements to incomplete tuplets when reading from a file
                                                                          • Fix #272042: Saved preferences override command line options
                                                                          • Debian fix: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=898757. Fix crash when starting with piano open.
                                                                          • Allow path to be relative to stored album file
                                                                          • Fix #273660 : MIDI Keyboard Not Responded when Pressed Before Opening a Score

                                                                          New contributors

                                                                          Thank you to everyone who contributed to this release, and a special shout-out to the five new contributors:

                                                                          • rcombs
                                                                          • aTTocs
                                                                          • JGreenlee
                                                                          • dmitrio95
                                                                          • rechi

                                                                          Release notes for MuseScore 2.2.1 (April 3, 2018)

                                                                          After the release of MuseScore 2.2 on March 27th 2018, we found a couple of regressions that we addressed in MuseScore 2.2.1 released on April 3rd 2018. We also updated all languages to latest translations.

                                                                          Bug Fixes

                                                                          • Fix #270803: [Regression] Messed playback in the score
                                                                          • Crash reported in #270748: [Regression] Playback slow to engage, when starting playback too quickly after load score
                                                                          • Fix #270878: [Regression] MIDI fixup for overlapping note shouldn't kick in for different midi tracks
                                                                          • 2.0.x score gives synthesizer output artifact with new soundfont

                                                                          See also the Release notes for MuseScore 2.2.

                                                                          Release notes for MuseScore 2.2

                                                                          MuseScore 2.2 was released March 27, 2018.

                                                                          New features

                                                                          • New MuseScore_General.sf3 soundfont
                                                                          • Fix #5163: MIDI output
                                                                          • Fix #208006: Built-in MP3 support for Windows (finding and installing third-party DLL no longer necessary)
                                                                          • Fix #183336: Search field in New Score Wizard template chooser
                                                                          • Fix #56451, fix #44666: Option to select whether to "Play repeats" for jump elements (D.S. al Coda, etc.)
                                                                          • Fix #269672: Selected notes are highlighted on the piano keyboard
                                                                          • Fix #184246: Select / More: ability to distinguish same pitch on a specific string in tablature
                                                                          • Fix #239021: All elements are now selectable by voice
                                                                          • Fix #198486: Copy and paste of multiple fretboards
                                                                          • Fix #175886: Fretboards can be added to chord symbols

                                                                          Known incompatibilities with previous 2.x

                                                                          • Improvements to the handling of voltas and repeats come with some compatibility issues. Where 2.1 and before required the repeat list of a volta to be set to the nth time that measure/volta is encountered (against intuition and against the existing voltas from the palette), 2.2 now requires the repeat list to reflect the human-readable logic of being the n th repeat in total. In consequence, some files created in 2.1 and before might be played with a different roadmap, especially if there are more than 2 voltas to a given repeat. It can be fixed by editing the volta's repeat list in Volta Properties (accessed via secondary-click).

                                                                            In short, 2.2 now behaves like earlier versions should have behaved and workarounds employed in older version to get the playback right are no longer needed (and will need to be reverted).

                                                                          • In 2.2, jumps have a new property, "With repeats," which if enabled causes playback to take repeats. Using this new feature in a score does not bar you from also editing that score using previous versions of MuseScore 2, but obviously those versions do not support this feature, either in playback or in saving files.

                                                                          • MuseScore 2.2 comes with a slightly different SoundFont called MuseScore_General.sf3, so your scores might sound a little bit different (hopefully better!). If you have saved custom synthesizer settings in a given score or as a new default, if those settings contain a reference to the old FluidR3Mono_GM.sf3, you might need to manually update those settings. For most users, the change to FluidR3Mono_GM should be automatic, seamless, and barely noticeable. If you have previously uploaded a score to MuseScore.com using the default playback and would like to get the new sounds, simply update your score.

                                                                          See also Incompatibilities between 2.1 and previous versions, which also apply between MuseScore 2.2 and versions before 2.1.

                                                                          Import/export

                                                                          MusicXML

                                                                          • Fix #235526: Update MusicXML to 3.1
                                                                          • Fix #235516: Support .musicxml file extension
                                                                          • Fix #255066: MusicXML articulations don't play back
                                                                          • Fix #197331: Lyricist does not appear in title frame after MusicXML import
                                                                          • Fix #100901: Beam properties issues on file imported from MusicXML by setting beam mode auto instead of end
                                                                          • Fix #267131: MusicXML export, print new-system missing in multi-measure rests
                                                                          • Fix #179551: MusicXML Not Exporting Positioning
                                                                          • Fix #268578: MusicXML import export rest colors
                                                                          • Fix #268968: MusicXML import export lyric color
                                                                          • Refactor MusicXMLParserPass[12]::note(), MusicXMLParserPass2::notations() and ExportMusicXml::chord() (PR #3470)
                                                                          • MusicXML import: add more logging for debugging purpose (PR #3330)
                                                                          • Fix spurious warnings on MusicXML import (PR #3495)
                                                                          • Fix #255791: [MusicXML import] use lyric number as relative instead of as absolute line number
                                                                          • Fix #269948: [MusicXML import] crash when importing single staff part referring to staff 2
                                                                          • Prevent crash in MusicXMLParserPass2::notations() when cr is null (PR #3536)
                                                                          • Fix #270360: [MusicXML import] Crash when trying to import tremolo on rest

                                                                          MIDI

                                                                          • Fix #74921: Implement pauses for MIDI files (hack)

                                                                          Guitar Pro

                                                                          • Fix #233911: [GP6] Standard notes and fret marks in Tabs don't match
                                                                          • Fix #232841: [GP6] Unexpected clefs after importing files for keyboards
                                                                          • Fix #232851: [GP6] Guitar scores: fretboard diagrams are imported but not the corresponding chord symbols
                                                                          • Fix #30336: Proper support for let ring in GP import
                                                                          • More fixes for #30336: Hammer/pull-off in GP3
                                                                          • More fixes for #30336: Palm mute are now spanners
                                                                          • Fix #178761: [GP] Slurs are not imported
                                                                          • Fix let ring import, subtitle import in GP3
                                                                          • Several fixes for GP6 import, see #247361. Tuplets in voice > 1, freetext not duplicated, barre in multiple voices, better freetime support
                                                                          • Fix #98786: Add mapping between GP6 and MS instruments
                                                                          • Fix #269498: Typo in instrumentMapping GP6 import of baritone
                                                                          • Remove ottava line width style in GP import

                                                                          SVG

                                                                          • Fix #226286: TAB staves are not hidden in SVG export
                                                                          • Fix #198491: Tablature staff lines go through fingering number in graphic export from command line
                                                                          • Fix #205456: Encode special characters in SVG output for user supplied metadata such as title
                                                                          • Export bitmap to svg with lower resolution than original when applicable
                                                                          • Save spos doesn't work with mmRest

                                                                          Save online

                                                                          • Set content length of media. See #197716
                                                                          • Improve media upload, make it cancellable and retry on failure. See issue #197716
                                                                          • Fix #196566: 'Save online' doesn't work properly for scores in 'Continuous View'
                                                                          • Add error code to message when uploading audio

                                                                          User interface

                                                                          • Various spelling fixes
                                                                          • Consistently use "System Break" rather than "Line Break"
                                                                          • Fix #226416: Change both "Drumroll Editor" and "Pianoroll Editor" to "Piano Roll Editor"
                                                                          • Finish fixing #100396: Change "note head" to "notehead" in UI
                                                                          • Fix #195891: Score information too big for small screens
                                                                          • Fix #251301: Wrong octave in status display for transposing instruments
                                                                          • Fix #211461: Show text of other dynamics in status line
                                                                          • Add screenreader info for text and dynamics
                                                                          • Fix #269467: Ignore accents when searching instruments
                                                                          • Fix #265745: Hide 'Select More > Same String' if the instrument is not a string instrument
                                                                          • Fix #263920: Home/End keys go to start/end of line in text
                                                                          • Fix #268197: Up/down arrow keys in first/last line of text don't go to beginning/end (Mac only)
                                                                          • Fix #91056: BPM field in Play Panel is not immediately synced
                                                                          • Fix #185151: Shortcut Editor press Clear should remove message about previous conflict
                                                                          • Fix #117486: Wrong scrolling of 2nd and subsequent pages when playing a multi-page score with vertical page layout
                                                                          • Fix #197101: Ctrl+Home should reposition canvas
                                                                          • Fix #209331: Updated Descriptions of Enharmonic shortcuts to reflect current implementation.
                                                                          • Fix #17615: Enabled the Delete menu in menu bar
                                                                          • Fix #213686: Add shortcut for Select > More
                                                                          • Fix #4954: Change instrument via staff properties doesn't affect clef
                                                                          • Fix #197176: Palette double click ignores voice filter
                                                                          • Fix 267721, fix 267722, fix 268215: Added resetSpanType functionality and inspector editing of barline-multiselection
                                                                          • Fix #248316: Disable autocompletion of zoom percentage field
                                                                          • Fix short instrument names in String Orchestra template
                                                                          • Add missing top 7 pitches to editpitch dialog
                                                                          • Fix #178591, fix #85401: Ottava palette not consistent on double-click
                                                                          • Fix #266370: Reset value button in Inspector - tool tip
                                                                          • Fix #268554: Improved string for "Makeup gain" knob
                                                                          • Fix #209596: Image Capture + Copy + Transparency issue
                                                                          • Improve some strings based on translator feedback
                                                                          • Fix #268704: General Style / Score dialog: Alter "Display note values ..."
                                                                          • Fix #269212: "Tab bar" in View menu on macOS Sierra
                                                                          • Fix #269383: Flip not worked if even number of elements of one chord selected
                                                                          • Fix #246176: Hide fret conflicts in tab staff when "Show Unprintable" is off
                                                                          • Fix #205946: The last entered extra bass in lutes > to 7 courses is shown when launching the playback
                                                                          • Fix #153691: Drum tools palette not closing when switching between files
                                                                          • Fix #232931: for 2.2 - allow break shortcut on selections
                                                                          • Fix double click with list selection
                                                                          • Fix translations of Qt related strings for the gd and lv locales
                                                                          • Fix #46046: Add tint to highlighted invisible elements

                                                                          Score layout

                                                                          • Fix #117191 and fix #82021: Hack to correct font kerning under Windows
                                                                          • Fix #259631: Correct vertical position of bass bourdons
                                                                          • Fix #251966: Invisible measure not displayed correctly
                                                                          • Fix #243501: Fretboard diagrams: 'X' (mute) and '0' (open) marks don't obey 'Scale' value
                                                                          • Fix #240011: Bad font for long name after section break
                                                                          • Fix 267602: Layout jump with naturals in key signature
                                                                          • Fix #166016: Slur on grace after wrong
                                                                          • Fix #195146: Rehearsal mark alignment changes to center after reload if added via palette double click
                                                                          • Fix #268551: Stem direction is linked between score and part
                                                                          • Fix #269238: Make sure min and max system distance don't surpass one another
                                                                          • Fix #234576: Time signatures get moved when splitting measures
                                                                          • Fix #168421: Joining scores via Album feature loses spacers in subsequent scores
                                                                          • Fix #266144: Mac: Too wide spacing in dynamics with more than one character (not in 2.2RC)
                                                                          • Fix #270476: Tuplets numbers, when creating parts, obey first to the scaling in main score instead of the default parts scaling (not in 2.2RC)

                                                                          Playback

                                                                          • Fix #197131: Regression: Bass synthesizer and bass guitar create popping sounds
                                                                          • Fix potential endless loop when generating midi with arpeggio
                                                                          • Remove unneeded audio buffer overwrite of unchanged contents at every cycle
                                                                          • Synth meter l/r bugfix
                                                                          • Fix #230351: Articulations and ornaments do not play at moderate to high tempos
                                                                          • Fix #8604, fix #4525 , fix #6091, fix #48456, fix #148276, fix #230531, fix #267778: Improve volta playback
                                                                          • Fix #269044: Fluid: default velocity-to-filter cutoff modulator should be disabled
                                                                          • Fix #269280: Playback when adding an accidental
                                                                          • Fix #268991: Regression: Fluid: Envelopes are not behaving correctly. Workaround: skip mod envelope delay and attack phases if they are each less than 100 samples long
                                                                          • Fix #87066: Incorrect Pitch When Alternate Values Used for 'Scale Tune'
                                                                          • Fix #234811: No sound on Mac, I/O's PortAudio API drop down menu empty
                                                                          • Fix #198086: [Mac] No sound via Bluetooth or Airplay
                                                                          • Fix #266521: When playing MuseScore sound is missing.
                                                                          • Fix #269937: Implement proper preset fallback when using instruments on banks greater than 0
                                                                          • Fix #148276: Open volta lines must be extended over the entire ending to play back correctly
                                                                          • Fix #270332: playRepeats replay copy was too greedy
                                                                          • Fix #12971: Same note in different voices and lengths plays only the length of the shortest note
                                                                          • Fix #252201: playback holds during section break (not in 2.2RC)
                                                                          • Fix #270690: default zita reverb settings too boomy (not in 2.2RC)

                                                                          New instruments and instrument fixes

                                                                          • Fix #267488: Add Baryton to the Instruments List
                                                                          • Fix #257636: Add Bass Clarinets with bass clef
                                                                          • Fix #264256: Incorrect Notation for Low Modern Flutes
                                                                          • Fix #264256 followup: wrong transposition of sub contra alto flute
                                                                          • Fix #213391: Add G clarinet and Lupophone, extend ranges of oboe, contra* clarinets and contrabass
                                                                          • More frets for steel and 12 string guitars
                                                                          • Add male and female voice to instruments and use in closed score SATB template
                                                                          • Fix #153566: Add the oud as instrument
                                                                          • Fix #229501: E Trumpet wrong transposition
                                                                          • Fix #197466: Fix ranges for trombone
                                                                          • Add new tenor and bass marching drum mapping. See #196321
                                                                          • Fix #166041: Ranges for tin whistle (C, Bb and D)
                                                                          • Fix #198496: Add Db piccolo flute
                                                                          • Fix some instrument (short) names based on translator feedback
                                                                          • Fix #269240: Add winds and strings section to instruments list
                                                                          • Add 6-str. Electric Bass and 5-str. Electric Bass (High C/Tenor), plus Tablature and also Baritone Guitar
                                                                          • Fix marcato articulation for some drums
                                                                          • Remove Treble Flute from common 'genre', add Alto Flute to it

                                                                          Crashes and corruptions fixed

                                                                          • Fix #255646: Crash changing actual duration of only measure
                                                                          • Fix #246496: Crash when adding tie after entering notes in drums
                                                                          • Fix #213221: Crash when adding fermata on barline in part for staff >1 when score has spanning barlines
                                                                          • Fix #219521: Add a SVG file by double-click, then clear it in the palette, leads to crash
                                                                          • Fix #227096: Crash by reseting/editing lyrics with underscore before rests
                                                                          • Fix #267789: crash on tie with grace note
                                                                          • Fix #198396: Crash when export SVG from file with mmRest and hidden staff
                                                                          • Fix #232776: [GP6] Crash when scores for keyboards contain chord symbols
                                                                          • Fix #268009: Crash on MusicXML Import caused by duplicate clef definition
                                                                          • Fix #239826: Crash when importing MusicXML from Sibelius by ignoring lyrics on grace notes
                                                                          • Fix #267569: Numeric overflow causes MusicXML import crash
                                                                          • Fix possible crash in MusicXML export with empty textline
                                                                          • Fix #267896: Crash when loading a capella score
                                                                          • Prevent crash. See forum #268294
                                                                          • Fix static cast before type check can cause crashes
                                                                          • Fix #105646: Create album of continuous-view scores crashes
                                                                          • Fix #268293: Crash on creating tuplet with baseLen less than 1/128th
                                                                          • Fix #229686: Crash/corruption by consecutively entering upper tuplets
                                                                          • Fix #267549: Metronome mark for swing contains several metronome-note and crash
                                                                          • Fix crash when rendering svg with mmRest
                                                                          • Fix #189741: Corruption on change duration with local timesig
                                                                          • Fix #224781: Corruption creating tuplet on mmrest
                                                                          • Fix #247641: Tremolos between notes corrupted on part creation
                                                                          • Fix #202271: Copy-paste sextuplets/octuplets and their removal leads to corruption
                                                                          • Fix #202271: copy-paste of tuplets with non-reduced ratio
                                                                          • Fix #222181, fix #269998: Dotted rhythms within tuplets
                                                                          • Fix #270386: Do not allow gaps in tuplet, make invisible instead
                                                                          • Compare duration() of tuplet with calculated duration to see if it needs to be sanitized (PR #3571)
                                                                          • Check for missing elements before sanitizing a tuplet (PR #3571)

                                                                          Build system and packaging

                                                                          • Make sure at least Qt 5.4 gets used
                                                                          • Make PCH_HEADER and PCH_INCLUDE always available, unbreaks Clang builds on non macOS platforms
                                                                          • Fix warnings with gcc >5.2 and Qt>=5.7 - fix pch and deprecated qt declarations - adjust misleading indenting - deal with unused param 'truncate' in durationtype.cpp - simpify some int casts
                                                                          • Add files to create a snap package for version 2.2
                                                                          • Fix #240941: add Keywords to xdg desktop file
                                                                          • Remove UiTools as a dependency
                                                                          • Fix #201146: allow BUILD_LAME=FALSE
                                                                          • Makefile: Add an option to use system's freetype library
                                                                          • Remove check for update for Windows Store
                                                                          • New policies CMP0068 and CMP0071 for CMake 3.10
                                                                          • Enable Jack in AppImage builds
                                                                          • Fix #269845 : Svg don't inherit QPaintEnginePrivate (causes crash on startup when using Qt 10.x)
                                                                          • Fix errors in mscore.1 manpage
                                                                          • Fix numerous reports of missing all.h during compilation
                                                                          • Add proper SIL OFL licenses to the mscoreTab and mscore-BC fonts.
                                                                          • Fix use of CMAKE_CXX_FLAGS for PCH generation
                                                                          • Remove redundant CMAKE_CXX_FLAGS assignment
                                                                          • Unbreak using cmake build types other than DEBUG and RELEASE
                                                                          • Fix #235411: Corrupt SVG icons for new note input modes
                                                                          • Reversing the order in which mtest compares reference and test file
                                                                          • Replace FluidR3Mono_GM by MuseScore_General and don't store SoundFont on git anymore
                                                                          • Build release MSI on Appveyor
                                                                          • Keep FluidR3Mono_GM.sf3 name, and install it under MuseScore_General.sf3 if it cannot be downloaded
                                                                          • Use a blank mscore_en.ts to update new strings, and not mscore_en_US.ts
                                                                          • [Travis-CI] Zip and upload source code, soundfont, revision.h for stable release (not in 2.2RC)

                                                                          Miscellaneous

                                                                          • Fix #198831: Regression: Cannot enter rests via mouse on drum staves
                                                                          • Fix #269774: Cannot use the mouse to enter notes on a staff with invisible lines
                                                                          • Fix #269844: Adding notes to a staff with hidden empty staves nearby
                                                                          • Fix #107231: Paste of note onto rest should preserve destination duration
                                                                          • Fix #248611: Wrong spelling on paste of note to rest
                                                                          • Fix #245731: Slurs not obeying voices of Selection filter
                                                                          • Fix #189736: On copy/paste measure(s) with slur(s) in score, the slur(s) get(s) lost in part
                                                                          • Fix #81711: Bad path on restore session
                                                                          • Fix #102716: Update text on load style
                                                                          • Fix #215876: Empty volta line text is not preserved and reverts to "1."
                                                                          • Fix #219536: mute checkbox is two state and should be set as bool
                                                                          • Fix #195436: Weird placeholder order in "File not found/File corrupted %1"
                                                                          • Fix #267760 : Screen capture in PDF format doesn't work correctly
                                                                          • Use pdfPrinting mode for image capture
                                                                          • Fix #265183: Piano Roll editor eats %100 CPU for most edits
                                                                          • Fix #268842: Need a space option in lyrics paste that doesn't advance to new note
                                                                          • Fix #24745: Add OS info to revision
                                                                          • Fix #269132: Score properties wiped when saving a generated part
                                                                          • Fix #125121: Formula determining octave number affecting split staff point
                                                                          • Fix #268465: Image Capture: No file saved when selected rectangle is 'negative'
                                                                          • Fix #150956: Saving fails when relative pathnames used on command line
                                                                          • Fix #264073: Edition of fret numbers in TAB staff is not played in Note input mode (not in 2.2RC)
                                                                          • Fix #196771: Regroup Rhythms deletes various elements (not in 2.2RC)

                                                                          Plugins

                                                                          • Fix #249541: Improvements to Plugin Manager/Creator (for 2.2). All 3.0-dev changes ported into 2.2 branch.
                                                                          • colornotes plugin: improve description and add comments
                                                                          • Fix #249631: Add SaveAs to PluginCreator. Also changed "New" to generate correct version of import MuseScore. Also added a "Save To:" message while saving.
                                                                          • Fix #198826: enable Plugin Manager and Plugin Creator (almost) always

                                                                          New languages

                                                                          • Fix #244636: Add Kabyle language
                                                                          • Fix #218196: Add Armenian (hy)
                                                                          • Fix #268873: Add Igbo language

                                                                          New contributors

                                                                          Thank you to everyone who contributed to this release, and a special shout-out to the 15 new contributors:

                                                                          • nasehim7
                                                                          • tomcucinotta
                                                                          • Victor-ZZ
                                                                          • CCInc
                                                                          • vliegnaarbeer
                                                                          • anatoly-os
                                                                          • ChWick
                                                                          • dinukadesilva
                                                                          • oberon2007
                                                                          • rjmatthews62
                                                                          • finleylau
                                                                          • MarkusLutz63
                                                                          • lyrischesich
                                                                          • mirabilos
                                                                          • mattmcclinch

                                                                          Release notes for MuseScore 2.1

                                                                          MuseScore 2.1 was released May 2, 2017.

                                                                          Top new features

                                                                          • New note input modes:
                                                                            • Rhythmic input: enter rhythm first, pitches later. Saves having to swap back and forth between computer and MIDI keyboard.
                                                                            • Semi-real-time MIDI input - a limited form of real-time input (play the piece on a MIDI keyboard and notation is generated automatically). In semi-real-time, you can't enter triplets or notes shorter than your chosen duration, but it is more reliable than fully real-time entry.
                                                                                - Real-time (automatic)—play along with metronome
                                                                                - Real-time (manual)—play while tapping a key/pedal to set tempo
                                                                          • Much better support for SFZ sample libraries in Zerberus synthesizer (see below)
                                                                          • New "Swap" command in addition to "Copy, Cut, Paste"
                                                                          • New "Regroup Rhythms" command under Layout menu to split and tie notes and rests according to time signature rules
                                                                          • Mid-staff instrument changes now also change transposition
                                                                          • More options to select similar notes in Select / More...
                                                                          • Instrument names editable by double-click
                                                                          • "Instrument Change" and "Fingering" text available from Add/Text main menu and allow keyboard shortcuts
                                                                          • Allow keyboard shortcuts to toggle "Hide Empty Staves" and for up bow and down bow symbols
                                                                          • Find a numerical rehearsal mark using Ctrl-F with "R#"
                                                                          • Previous and next buttons added to the Staff Properties dialog
                                                                          • Pause property for caesura in Inspector
                                                                          • Bracket property for accidentals in Inspector
                                                                          • "Also change shorter notes" option when adjusting beaming rules for time signature
                                                                          • Load multiple SFZ at once in Zerberus
                                                                          • Option to add page/section breaks when creating album
                                                                          • Album Manager has default "Untitled" album on first use
                                                                          • Revision log field added to Save Online dialog when updating already uploaded score
                                                                          • Settings for MP3 bitrate
                                                                          • New instruments: percussion, Bb sousaphone, guitar (treble clef), Irish tenor banjo, nyckelharpa, sackbuts, and different types of marimbas (see below)
                                                                          • New templates: brass band, small concert band, marching bands, battery and pit percussion, bluegrass band (see below)
                                                                          • Allow fingerings in tablature staves
                                                                          • Improved support for historical tablature notation (see below)
                                                                          • New Shift-Q and Shift-W commands to decrease/increase duration to next nearest dotted or undotted value
                                                                          • Upload audio rendition to musescore.com together with score

                                                                          Known incompatibilities with 2.0

                                                                          1. We have a new option in Staff Properties for tablature staves to allow fingerings in tablature. If this option is activated in 2.1, fingerings can be added to fret numbers, and fingerings attached to linked staves will be displayed in the tab staff. A file created with MuseScore 2.1 with this option activated will not show fingerings if opened with MuseScore 2.0.

                                                                          2. The text style for dynamics (which is used to automatically format text added to a dynamic, such as "sub.") is now italic by default. If a score created with MuseScore 2.1 using this style is opened in MuseScore 2.0, 2.0 will render the text without italics. If a score made in 2.0 has default, non-italic, text added to a dynamic, it will be displayed in italics in MuseScore 2.1.

                                                                          3. In MuseScore 2.0, the Instrument Change element allows you to change the sound for a staff mid-score, but the transposition is not handled correctly, nor does the change affect linked parts. This leads to scores that play back incorrectly if they display correctly, or display incorrectly if they play back correctly—or that do both incorrectly. For MuseScore 2.1, this is fixed—Instrument Change elements added to scores using MuseScore 2.1 will now transpose and affect linked parts correctly. A file that contains transposing Instrument Change elements created with MuseScore 2.0 will not automatically be fixed by opening it in MuseScore 2.1—it will continue to behave incorrectly with respect to either display or playback or both. However, if you remove the Instrument Change elements, correct any remaining errors, and re-add the Instrument Change elements using MuseScore 2.1, it should behave correctly for both display and playback. On the other hand, a score with transposing Instrument Change elements that works correctly in in MuseScore 2.1 will not continue to work correctly if opened with MuseScore 2.0. In general, the playback will be correct, but the display will be transposed incorrectly.

                                                                          4. Historical tablature support, particularly for lute, has been greatly improved and it comes with incompatibilities with MuseScore 2.0. Tablature scores from 2.0 should be mostly fine opened in 2.1; the only exception is that "10" will be replaced by "X" both in fret numbers and in string ordinals (needs clarifying—10 in standard tab is still 10), but opening a 2.1 file in 2.0 will cause severe issues if the score uses these new tablature styles.

                                                                          5. Multimeasure rests now automatically break on both sides of a measure with a fermata. If a score created in 2.0 has a multimeasure rest with a fermata hidden somewhere inside of it, when opening that score with 2.1 the multimeasure rest will be broken. If the user already manually broke the multimeasure rest to expose the fermata in 2.0, there will be no change opening it in 2.1. On the flip side, if a score is created in 2.1 with multimeasure rests automatically broken by fermatas, and then that score is opened and printed from 2.0, the fermatas won't appear.

                                                                          6. Courtesy accidentals added to a note tied to the previous measure will display in 2.1 but will not display in 2.0. Both versions will play this correctly.

                                                                          7. A problem with the playback of the Tenor Drums instrument was discovered after the release. These had no playback at all prior to MuseScore version 2.0.3; in 2.1, the drum 4 and spock drums do not play, either in scores created with previous versions of MuseScore or in scores newly created with 2.1. This can be fixed in either of two ways:

                                                                            • Use 2.0.3's version of the SoundFont.
                                                                            • Manually adjust each score as described here.

                                                                          UI improvements

                                                                          • Fix #110711: Color piano keys when MIDI keys are pressed
                                                                          • Fix #91571: Add toolbar toggles to View menu
                                                                          • Fix #33131: Add a way to select/deselect all in Selection Filter
                                                                          • Re-pitch button moved into new note input button menu in toolbar
                                                                          • Fix #8954: Drag to reorder score tabs
                                                                          • Fix #109651: Add hint at the download page when loading pre 0.9.6 scores
                                                                          • Fix #100396: Change "note heads" to "noteheads"
                                                                          • Fix #67291: Confirmation before deletion of a palette
                                                                          • Fix #111856: Add Unicode accidentals to "Common Symbols" section of Special Characters
                                                                          • Fix #114366: Add "delete measure" to staff context menu
                                                                          • Fix #99476: Update rest icon to show other durations than quarter rest
                                                                          • Fix #100996: Show "Slur" or "Tie" instead of "Slur/Tie" in inspector and right click menu
                                                                          • Enable inspector for all breath/caesura types
                                                                          • Fix #112611: Add repeat barlines to Repeats palette
                                                                          • Fix #139611: Filter -> Search in Preferences / Shortcuts
                                                                          • Remove Text Tool from right click menu in toolbar
                                                                          • Fix #124691: Navigator cannot display 3-figure page numbers
                                                                          • Fix #86266: Mismatch between Bend properties and Tremolo bar properties
                                                                          • Fix #124766: Preferences / General / Animations doesn't work
                                                                          • Fix #124476: Change "New" button in lower left of Score Properties window to + button
                                                                          • Fix #152206: Revision is not shown in Score Properties
                                                                          • Fix #152211: Show correct API level in Score Properties
                                                                          • Fix #100221: Change Page Settings "Landscape" checkbox into "Portrait/Landscape" radio buttons
                                                                          • Fix #123146: Window title changes after save score
                                                                          • Fix #151856: TAB: Improvement of cursor position
                                                                          • Fix #18452, fix #68151, fix #68856, fix #71416, fix #74811, fix #97796, fix #97821, fix #112291, fix #120096: save/restore window sizes and positions
                                                                          • Fix #119376: Utility functions for save/restore geometry
                                                                          • Fix #121746: Ask for confirmation before deleting a workspace
                                                                          • Fix #117301: PulseAudio QGroupBox min height
                                                                          • Fix #112911: Score does not display fully in Navigator if latter set to ON when score loads
                                                                          • Fix #137446 (follow up for fix #112911): Navigator rectangle selection is lost
                                                                          • Fix #152886: Title bar of Selection Filter says only "Selection"
                                                                          • Follow-up to fix #97131, correcting title case in menu for Split Measure
                                                                          • Add colons to Inspector texts and various text fixes and improvements
                                                                          • Fix some label texts in Inspector to match the majority
                                                                          • Fix #106026: System Text should be labeled as "System Text"
                                                                          • Fix #102361: Tooltip explaining "New All" button in Parts dialog
                                                                          • Fix #121896: Better tooltip explaining BPM
                                                                          • Better tooltips for note grouping's "Reset" button and "Add" button in Master Palette / Time Signatures
                                                                          • Vertical spacers in layout and better tooltip for "Add" button in Master Palette / Key Signatures
                                                                          • Fix #114931: Show subtitles on all pages of New Score Wizard
                                                                          • Fix #104771: Dragging mouse up/down moves Zita1 controls the wrong way
                                                                          • Fix #163666: Order recorders by pitch range
                                                                          • Fix #166231: Ambitus gets reported an octave too high in Inspector, status bar, and screen reader
                                                                          • Disable "Scale to frame size" in Inspector for images not in a Frame
                                                                          • Rename "Repeat count" to "Play count" in Measure Properties dialog
                                                                          • Fix #105676: Rename "Staff distance:" to "Stem distance:" in General Style / Articulations, Ornaments
                                                                          • Fix #105301: Ctrl+F "Find" saves searched values
                                                                          • Fix #109576: Hide gray line above figured bass when View / Show Unprintable is unchecked
                                                                          • Fix #84416: Allow long note groups to scroll or pan in Create Time Signature dialog
                                                                          • Fix #165701, fix #165716: Reposition scoreview when cursor moves
                                                                          • Fix #25271: Part export automatic numeration of same instruments
                                                                          • Fix #10722: Label fields for width and height of toolbar icons in Preferences / General
                                                                          • Fix #181861: Pinch/spread to zoom uses wrong center point
                                                                          • Fix #182221: Updated Staff Properties Dialog
                                                                          • Fix #181966: Volume slider notches according to range in Synthesizer
                                                                          • Fix #182171: Leftmost pixel column in Synthesizer meter does not update when user adjusts volume while playing
                                                                          • Fix #180071: Do not scale webview in start center
                                                                          • Tweak piano keyboard to be resizable with touchpad (and probably touchscreens)
                                                                          • Better default size on startup
                                                                          • Fix #184381: Unnecessary "MuseScore: " prepended to most window titles and wrong title of Split Staff dialog
                                                                          • Fix #177646: More appropriate column widths and sortable columns in Edit Drumset dialog
                                                                          • Fix #109066: Metronome gain and volume slider left double click defaults to silence

                                                                          Crashes and corruptions fixed

                                                                          • Fix #105811: Crash when creating full measure rests on multimeasure rests
                                                                          • Fix #105621: CRASH album when remove score w/ TBox
                                                                          • Fix #112431: Crash in note entry mode in drumset
                                                                          • Fix #137116: CRASH if try changing duration of Repeat Measure
                                                                          • Fix potential crash during layout or measure
                                                                          • Fix potential crash in lyric separator layout
                                                                          • Fix potential crash in slur layout
                                                                          • Use fallback font rather than crash
                                                                          • Fix #138256: Crash after moving to kneed beams in grace notes
                                                                          • Fix #120316: Crash when deleting a part
                                                                          • Fix #120016: Crash on play caused by channel mismatch
                                                                          • Fix #116556: Crash by opening the Instruments dialog box after parts deletion and undo
                                                                          • Fix #119581: Select note values onto multimeasure rests in parts leads to corruption and crash
                                                                          • Fix crash when undoing transposition after changing spatium
                                                                          • Fix #106021: Reducing actual duration of measure with text elements will corrupt measure
                                                                          • Fix #126916: Undo after creation of parts with linked staves causes corruption
                                                                          • Fix #124966: Create a pickup measure in parts with two instruments at least causes a crash
                                                                          • Fix #140081: Repeatedly deleting displaced beams causes crash
                                                                          • Fix #139656: Select a note/rest before change the measure duration leads to corruption/crash
                                                                          • Fix #141496: Copy-paste multimeasure rests containing a full measure, or not after cuting, causes corruption/crash
                                                                          • Fix #136236: Remove the time signature in the presence of another one in a score with parts leads to corruption/crash
                                                                          • Fix #127281: Crash when adding line/section/page breaks by double-clicking on a multimeasure rest
                                                                          • Fix #164446: Crash when opening bad MIDI file
                                                                          • Fix #166101: [GP6] Crash when opening a file containing 2Mrcs instrument
                                                                          • Fix #70571 and fix #93116: [GP6] Crash when importing gpx ottava
                                                                          • Fix #171071: Crash when importing incorrect MIDI file
                                                                          • Fix #167071: MusicXML import crash on overlapping wavy lines
                                                                          • Fix #154551: Crash by removing a score with frames when the last measure contains a pedal line/volta line
                                                                          • Fix #173381: Copy-paste a multimeasure rest on another one causes corruption after undo
                                                                          • Fix #173366: Protect against a couple of crashes
                                                                          • Fix #174026: Crash by changing time signature in a measure in Continuous view when a glissando extends from the previous measure
                                                                          • Fix #152506: Introduce a time signature in a measure which the Actual duration is exactly identical leads to corruption/crash
                                                                          • Fix #174721: Cut a time signature before a glissando and toggle in another View causes a crash
                                                                          • Fix #175341: [GP6] Crash on a file involving arpeggios, ties and capo Feature
                                                                          • Fix #167416: Cut a measure with tuplet causes crash
                                                                          • Fix #164671: Crash when changing 'spanned staves' from 2 to 1 in the Inspector
                                                                          • Fix #105951: CRASH on close score after deleting all segment of a spanner
                                                                          • Fix #154591: Crash when loading palette with small width/height grid
                                                                          • Partially fix #151521: Undoing a multimeasure rest range selection in parts causes a crash
                                                                          • Fix #112656: Crash when opening score with a duplicate Glissando
                                                                          • Fix #178176: Hang/crash by extending a glissando on a note with another one in the second staff
                                                                          • Fix #151711: Remove a time signature in a part causes corruption in the other parts and main score
                                                                          • Fix #119041: Font name containing a ampersand will corrupt file
                                                                          • Fix #121561: Score corruption when creating tremolos in Score+Parts
                                                                          • Fix #99146: File / Save Selection… leads to corrupt score if selection is not 4/4 and does not start with time signature
                                                                          • Fix #180986: Crash on ctrl+home of empty score
                                                                          • Fix #173366: Corruption on paste
                                                                          • Fix #183846: Splitting irregular measures produce extra rests
                                                                          • Fix #175821: [MusicXML import] Crash by importing a file with breath mark after grace note
                                                                          • Fix crash when converting to PDF on the command line
                                                                          • Fix #192236: Freeze when opening file with very large glissando
                                                                          • Fix #97106: Crash when undo after save in a score with parts and courtesy key signature

                                                                          Audio playback improvements

                                                                          • SFZ synth greatly improved (see Zerberus)
                                                                          • Fix #104981: Synthesizer: zita1 reverb: Eq2 not working
                                                                          • Fix #87266: Metronome plays eighth notes if pickup measure has actual duration of 1/8
                                                                          • Fix #118816: midiAction on wrong midi channel
                                                                          • Fix #117726: MidiAction program change - doesn't change on note
                                                                          • Fix #119136: Instrument doesn't switch back after midiAction. See PR #2750
                                                                          • Fix #70016: Fixed formula to calculate staff given a note in presence of staffMove and added test case testTrillCrossStaff
                                                                          • Fix #115491: Loop out on end repeat goes to repeat start and not loop in
                                                                          • Fix #52841: No sound feedback in repitch mode when using MIDI or Piano Keyboard
                                                                          • Fix #147086: Section break pause is not respected in a file with parts after save/open cycle
                                                                          • Fix #70791: Export to audio does not respect Synthesizer settings unless saved to score
                                                                          • Fix #112556, fix #113416: Sample based Volume for envelopes and modlfo
                                                                          • Fix #119446: Calculate envelope for first point of new envelope right, fix divison by zero in amp increment calculation
                                                                          • Fix #119731: FluidSynth optimizations
                                                                          • Fix #120061: Fix clicking sound in playback due to filter init
                                                                          • Fix #165281: Update FluidR3Mono to 2.312

                                                                          Zerberus

                                                                          • Fix #117716: Stop note on pedal released when sustained during attack
                                                                          • Fix #116906: Support for control structure, for details on set_cc see https://musescore.org/en/node/116906#comment-530701
                                                                          • Fix #117901: Support #include, change #define behavior, support
                                                                          • Fix #120066: Let zerberus support gain_cc/gain_oncc
                                                                          • Fix #116871: Add support for rt_decay
                                                                          • Fix #116691: On_hiccN/on_loccN support for zerberus
                                                                          • Zerberus: fix into loop (forgot offset because of interpolation), fix loop_sustain and simplify code
                                                                          • Fix #124656: mtests for Zerberus
                                                                          • Zerberus: check for seq range in onCC
                                                                          • Fix #122261: Add block comments to zerberus
                                                                          • Zerberus: fix control init
                                                                          • Zerberus: fix wrong position of seq zones
                                                                          • Fix #115991: Support for random playback
                                                                          • Fix #115806: Round robin not working
                                                                          • Fix #115996: Add sfz1 envelope support to zerberus (ampeg_* opcodes)
                                                                          • Fix #114681: Add loop support to zerberus
                                                                          • Do not consider ALSA driver changes if ALSA is not used

                                                                          Score layout and style

                                                                          • Fix #65846: Ledger lines do not change color with staff
                                                                          • Stack ledgerline below stem, not just below note
                                                                          • Fix #75816: Implement space management for formatted text
                                                                          • Fix #54501: Tied enharmonics incorrectly notated
                                                                          • Fix #113201: Tremolo bar appears above wrong staff
                                                                          • Fix #112846: Optimize rendering for Mi, Min, etc
                                                                          • Fix #139641: Do Shape notes(quarter and half) misaligned with stem (Emmentaler)
                                                                          • Fix #151156: Cross-staff glissando missing when creating piano part
                                                                          • Fix #119381: Scaling of fretboard chord diagrams
                                                                          • Fix #120041: Allow 0sp max. slope for tuplet bracket
                                                                          • Lyrics dash and melisma should have same color as preceding syllable
                                                                          • Fix #15121: Ledger lines don't appear for notes beyond staff in drum palette
                                                                          • Fix #42121, fix #78536, fix #103921: Slurs lost on exchange voices and add test for exchange voices
                                                                          • Fix #117956: Changing text background color does not work for circular frames
                                                                          • Fix #121051: Multimeasure rests should account for fermatas
                                                                          • Fix #112451: Inconsistency in part name in staff properties between extracted part and the score
                                                                          • Fix #105641: No initial clef
                                                                          • Fix #180286: Bad layout on undo with hbox
                                                                          • Fix #109021: Wandering hairpins due to miscalculation of barline widths
                                                                          • Fix #187151: Hairpin drift due to bad tie calculation
                                                                          • Fix #188061: Drift on spatium change
                                                                          • Fix #180991: Layout jump due to courtesy key signature barline
                                                                          • Fix #135791: Make dynamics text style italic
                                                                          • Fix #38941: Staff texts after the first are ignored in multimeasure rests
                                                                          • Fix #188461: Tie length ending on mirrored note too short

                                                                          Historical tablature

                                                                          • Fix #174066: Support for bass strings for lute tablature
                                                                          • Mixing mensural value symbols and beaming in historic tablatures
                                                                          • More French styles for frets and duration symbols
                                                                          • Font design improvement
                                                                          • New historical English fret style
                                                                          • Fix #185116: Changes to tablature flag automatism, tuplets and graces (now default hidden)

                                                                          Import and export

                                                                          Guitar Pro

                                                                          • Fix #147246: Repeat marks not working in gp3 and gp4
                                                                          • Fix #91341: Imports from *.gpx files play wrong drums sounds
                                                                          • Fix #150711: [GP6] Corruption when the gp file contains incomplete measures

                                                                          MIDI

                                                                          • Fix #122626: MIDI import truncated
                                                                          • XML escape lyrics in MIDI import
                                                                          • Fix #165496: Import MIDI track volume
                                                                          • Fix #167196: Change some MIDI XF chord symbol spellings
                                                                          • More precise tempo export in MIDI
                                                                          • Fix #184376: Initial key signature overwritten in exported MIDI with repeats

                                                                          SVG

                                                                          • Fix #105436: SVG export crashes MuseScore with files containing horizontal frames
                                                                          • Fix #105471: SVG export crashes MuseScore in Continuous View
                                                                          • Fix #107081: SVG export leaves space between stems and heads
                                                                          • Export an SVG file per page
                                                                          • Fix #114691: SVG Export: Tablature Note matrix needs rounding
                                                                          • Fix #119721: [SVG export] Note head and stem apart on downstem notes
                                                                          • Fix #174496: Export to SVG from Continuous view results in a Crash

                                                                          MusicXML

                                                                          • Fix #42281: [MusicXML] Title converted to copyright on import if positioned at bottom of page
                                                                          • Fix #107936: [MusicXML] crash when divisions is defined in second measure but used in first measure
                                                                          • Fix invalid MusicXML export when too many overlapping trills, ottavas or brackets are present
                                                                          • Fix #125881: [MusicXML Export] invalid MusicXML when too many overlapping hairpins are present
                                                                          • Fix #148131: [MusicXML] import of transposing score with chromatic tag only
                                                                          • Fix #142116: Order of ending/repeat in MusicXML
                                                                          • Time signature visibility in MusicXML import/export
                                                                          • Fix #120156: Infinite loop with an XML
                                                                          • Change #107936: Default to 4/4
                                                                          • Fix #20853: [MusicXML import] sound element's tempo attribute ignored
                                                                          • Fix #177216: Changed other dynamic to export text instead of dynTypeName
                                                                          • Fix #175226: [MusicXML import] add instrument-sound to MIDI mapping
                                                                          • Fix #186706: Export 7sus chord to MusicXML fails Reimport

                                                                          Other

                                                                          • Fix #113931: Freeze when importing Capella file with staff without time signature (workaround)
                                                                          • Fix #11014: [Ove Import] Import of chordnames is wrong
                                                                          • Fix #151846: [BIAB] Melody is not imported
                                                                          • Fix #81451: [Capella Import] Corrupt file when importing capx file with pickup measure

                                                                          Build system and packaging

                                                                          • Makefile: Use POSIX way of finding CPU count
                                                                          • Simplify CPU count
                                                                          • Fix debug build for XCode with CMake>=3.5.0.
                                                                          • Update README.md (Add link for mtest/README.md)
                                                                          • Allow BUILD_PCH to be set to on for Windows
                                                                          • Build Mac OS X nightlies on Travis-CI
                                                                          • Fix call to obsolete QChar::toAscii
                                                                          • Add option to use system FreeType
                                                                          • Select Item in Debugger with enter
                                                                          • Fix incorrect version in Linux desktop entry file
                                                                          • Build x86 AppImages on Ubuntu 12.04
                                                                          • Fix #152151: Change paths in bottled dylib
                                                                          • Quotes needed around ENV variable in IF
                                                                          • Sign macOS package on Travis-CI
                                                                          • Add Makefile option for Jack, Portaudio, PulseAudio
                                                                          • Make QWebkit and StartCenter webview optional
                                                                          • [Travis] add a way to insert musescore.com keys
                                                                          • Fix #193526: Create APPX for Windows Store

                                                                          Templates and instruments

                                                                          • Marching perc. improvements in instruments.xml, new template
                                                                          • Fix #111531: Add marching band and percussion templates
                                                                          • Add brass band, small concert band, small marching templates
                                                                          • Fix #105666: Add support for Croatian instruments (Tambura)
                                                                          • Fix #104896: Add sackbuts to instruments.xml
                                                                          • Rename "Baroque Flute" to "Traverso"
                                                                          • Added european bb sousaphone instrument
                                                                          • Fix #12489: General "Percussion" staff
                                                                          • Fix #111431 and fix #111311: Some additions/corrections to instruments.xml
                                                                          • Fix #115911, fix #115916: Add Uke with low G and fix wrong string for Bar. Uke
                                                                          • Make piccolo flute and all string basses transposing instruments with standard clef, instead of non-transposing instruments with octave clefs
                                                                          • Add "Guitar (Treble Clef)" to instruments.xml
                                                                          • Adjust Marimba range
                                                                          • Add slap and pop channels to plucked basses
                                                                          • Fix Dizi channel
                                                                          • Add Irish Tenor Banjo, incl. Tablature
                                                                          • Change My First Score to Untitled
                                                                          • Fix typo in chords_jazz.xml
                                                                          • Add nyckelharpa

                                                                          Miscellaneous improvements and bug fixes

                                                                          • Fix #113396: High CPU usage with navigator on
                                                                          • Fix #110796: Batch conversion from the command line; speedup vtest by using this
                                                                          • Fix #109626: Add option to force loading score in converter mode
                                                                          • Fix #104936: Atomic update sfPath->mySoundfontsPath
                                                                          • Fix #114956: Let cmdDoubleDuration() and cmdHalfDuration() reach more values
                                                                          • Fix #106266: Avoid unicode flats and sharps in filenames
                                                                          • Fix #104881: Arrow up/down and Delete keys stop working in other open scores after piano roll editor is opened in another
                                                                          • Fix #116276: Change enharmonic doesn't work as expected with linked staves also selected
                                                                          • Fix #136406: Non-Reduced ratio tuplets of full measure duration not copy-pastable
                                                                          • Fix #107556, fix #151446: Fix selection of measure after R or paste command
                                                                          • Fix #150141: Text in textframe disappears with Ctrl-C
                                                                          • Fix #107891: Selection lost on enharmonic change with accidentals
                                                                          • Fix #117656: Appended measures in different time signature. Thanks to PR #2729.
                                                                          • Fix #117546: Fix deleting first measure of part with key sig
                                                                          • Print: fix page size/orientation settings
                                                                          • Fix #125791: In continuous mode only first page of score gets printed
                                                                          • Fix #115971: Read-only access to std::vector, QVector and QList properties for qml
                                                                          • Fix #117206: OSC command /Tempo processes the parameter value wrong
                                                                          • Fix #111116: Cannot add courtesy accidentals for a tied note
                                                                          • Fix #113556: Note input toolbar not accessible via tab
                                                                          • Fix continuous panel flicker at beginning of system
                                                                          • Partial fix #106241: Add -D option to specify monitor DPI
                                                                          • Change copyright in About Box to 2017
                                                                          • Fix #150511: Remove default shortcut F2 for transpose up/down
                                                                          • Fix #153671: PDF export of parts doesn't have correct title metadata
                                                                          • Fix #164391: Don't mark score dirty on Save Online when only updating it
                                                                          • Fix #169161: Replace Public Domain mark with Creative Commons Zero in Save Online
                                                                          • Fix typo Execure > Execute named plugin (command line)
                                                                          • Fix #175346: Cannot enter special characters into tempo change
                                                                          • Fix #176151: Multibyte chars are not deleted correctly in text
                                                                          • Fix #72896: Image capture "save as" field is blank
                                                                          • Fix #176631: Select / More... selects wrong voice dots
                                                                          • Fix #178271: Select / More... selects tuplets in all voices
                                                                          • Fix #166651: Inability to select fingerings in different voices
                                                                          • Fix #125756: Inability to select notes in same voice, staff...
                                                                          • Fix #181131: Selecting flags by voice doesn't work
                                                                          • Fix #181341: Selecting accidentals by voice doesn't work
                                                                          • Fix #177116: Inability to select ties in a range selection if the last measure is also selected
                                                                          • Fix #85631: Range select -> Notes button in Inspector includes grace notes in list selection, disabling Inspector
                                                                          • Fix #177586: Slurs disappear, in the most cases, after editing and Escape if the bordering note
                                                                          • Text::drop when not already in edit mode needs to handle Supplementary Unicode
                                                                          • Fix drum note entry, avoid to be blocked in chord mode when mixing drum/melodic
                                                                          • Fix #180171: Change modifier key from Ctrl to Shift, to create chord with on-screen piano keyboard
                                                                          • Don't autosave unchanged "imported" 1.x scores
                                                                          • Don't look for SoundFonts in hidden directories
                                                                          • Allow saving audio to QIODevice
                                                                          • Fix #181616: Disable change anchor for Instrument Change text
                                                                          • Fix #181671: Restrict all text drag to page boundaries
                                                                          • Expose default synthesizer state
                                                                          • Expose the application QNetworkAccessManager
                                                                          • Fix #165741: Applying shortcut beam designations to multiple notes causes error
                                                                          • Fix #101256: Master palette locks up during search if text string does not match any symbol
                                                                          • Add access to TimeSig for plugins
                                                                          • Add ability to run plugin before converting in json job
                                                                          • Fix #51741: No beam for stemless slash notation
                                                                          • Fix ornamentDownPrall composed glyph definition
                                                                          • Fix #183816: Full measure rest displaced after time signature Change
                                                                          • Add minimal support for triple dots

                                                                          Mac-specific changes

                                                                          • Fix #104986: [Mac OS X] Full screen shortcut does not work to enter full screen, only to exit
                                                                          • Fix #102486: Add alternative full screen shortcut Ctrl+Cmd+F
                                                                          • Fix #120801: Make MuseScore unexecutable on Mac OS X 10.6 or earlier
                                                                          • Fix #182336: Color Picker window gets larger every time it's used
                                                                          • Fix rendering of non-square icons on high-dpi displays (done earlier in version 2.0.3.1)
                                                                          • Fix #127076: Store QColor as string in preferences file (done earlier in version 2.0.3.1)

                                                                          Linux-specific changes

                                                                          • Fix #122076: No "update" tab in preferences for Linux
                                                                          • Add higher resolution icons on Linux

                                                                          Languages

                                                                          • Fix/update language codes of qt_*.ts files
                                                                          • Simplify texts in various dialogs, for translators' benefit
                                                                          • Fix #109711: Don't translate filename extensions
                                                                          • Enable translation for paper format
                                                                          • Fix #115191: Wrong translation on English (AU)
                                                                          • Fix #123531: Separate Flemish from Dutch Qt translation
                                                                          • Fix #126901: Swap directional icons for RTL languages
                                                                          • Fix #124026: Update Qt's Arab translations
                                                                          • Fix #64046: Korean input method on Windows doesn't work with Shift
                                                                          • Partially fix #92591: No feedback while typing Korean
                                                                          • Fix #176601: Supplemental Unicode select, insert, paste
                                                                          • Fix #43681: ScoreView text edit ignore Ctrl/Shift/Alt/Caps for Win Japanese IME and fix InputMethod position when editing Chinese/Japanese text, do not rely on QInputMethod::locale() for CJK test

                                                                          New languages

                                                                          • Welsh
                                                                          • Arabic (Sudan)
                                                                          • Arabic (Egypt)
                                                                          • Arabic (Algeria)
                                                                          • Malayalam
                                                                          • Scottish Gaelic

                                                                          New contributors

                                                                          Thank you to everyone who contributed to this release, and a special shout-out to the 20 new contributors:

                                                                          • adrianholovaty
                                                                          • myltsev
                                                                          • andrewyoon
                                                                          • nezticle
                                                                          • wick.chr.info@gmail.com
                                                                          • duck57
                                                                          • coolguyxp
                                                                          • d.dewit
                                                                          • hpfmn
                                                                          • Qantas94Heavy
                                                                          • MLutz
                                                                          • mbrickn
                                                                          • raphaelc
                                                                          • Alexandre Joly
                                                                          • jon.enquist
                                                                          • Animesh7
                                                                          • roxluca
                                                                          • vinayakvivek
                                                                          • azmeuk
                                                                          • divya-urs

                                                                          Release notes for MuseScore 2.0.3

                                                                          MuseScore 2.0.3 was released April 6, 2016.

                                                                          New features

                                                                          • Cresc. and dim. dashed lines (cresc.   _     _     _     _     _ )
                                                                          • Localized translations of "Getting Started" interactive tutorial score
                                                                          • Adding ties to notes already entered will be possible without leaving note input mode
                                                                          • Built-in "revert to factory settings" command
                                                                          • Reorder linked parts is now possible in Parts dialog
                                                                          • Copy lyrics to clipboard tool under Edit → Tools
                                                                          • New compressor effect in the Synthesizer
                                                                          • Keyboard shortcut for sforzato/accent (default Shift+V), matching shortcuts for staccato, tenuto, and marcato
                                                                          • AppImage for all Linux flavors
                                                                          • New instruments supported: more trumpets and cornets, traverso (baroque flute), contra guitar
                                                                          • Twenty new default guitar fretboard diagrams in Advanced workspace and Master Palette

                                                                          UI improvements

                                                                          • Depressed white and black piano keys now blue instead of yellow for better visibility on projectors
                                                                          • Piano keyboard reflects ottava now
                                                                          • Option in Preferences → Canvas to show pages scrolling vertically or horizontally
                                                                          • Redesigned Special Characters palette for easy harp pedal diagrams and all kinds of musical symbols in text
                                                                          • Redesigned Page Settings dialog
                                                                          • Better naming of Join/Split Measure menu commands
                                                                          • Renamed File → Info... to File → Score Properties...
                                                                          • Add score file path to Score Properties
                                                                          • Disable fields in Score Properties that are not changeable
                                                                          • Slur/Tie in Inspector should expose Direction
                                                                          • Incorrectly functioning "Full Screen" menu command removed on Mac OS X
                                                                          • Tempo slider in Play Panel snaps to 100%
                                                                          • Preferences Choose Folder dialog uses native dialogs on Linux
                                                                          • Symbol-based fingerings moved to Fingering palette
                                                                          • Alphabetized fonts in General Style dialog

                                                                          Playback improvements

                                                                          • Orchestral sounds now default for orchestral percussion
                                                                          • Marching percussion sounds included by default
                                                                          • Volume of timpani increased
                                                                          • Overall default volume higher
                                                                          • Inverted mordent in baroque style plays as short trill

                                                                          See also playback bugs fixed below.

                                                                          Known incompatibilities with previous 2.0.x

                                                                          1. In order to make MuseScore files more compatible from one OS to an other, MuseScore 2.0.3 now ships the same version of FreeType for all operating systems. FreeType is the library which helps MuseScore to find out about the width of a notehead, for example. All the score elements metrics (but not the text) are now given by the same FreeType library. That should improve consistency across operating systems (i.e., a given score should be rendered the same on any OS with 2.0.3), but it also means that some scores might be rendered slightly differently than in 2.0.2.

                                                                          2. Slurs from one note with a stem to another note with an opposite stem are placed better in 2.0.3. Therefore, any manual adjustment to slurs in this configuration made in previous 2.0.x will look different in 2.0.3.

                                                                          3. MuseScore 2.0.3 adds cresc. and dim. dashed lines. Previous 2.0.x versions do not support this feature, and will display these lines as regular, solid hairpins. If a given score is then saved with an earlier 2.0.x and re-opened in 2.0.3, 2.0.3 will attempt to re-create the original dashed text line, but only with the default text and text properties—any changes from the defaults will be lost in this process.

                                                                          Bug fixes and minor changes

                                                                          Miscellaneous

                                                                          • Dragging score view no longer clears selection
                                                                          • Make synthcontrol and mixer persistent
                                                                          • Make tab index in sythesizer dialog persistent
                                                                          • New way to init diagrams from code using X-12O2 notation
                                                                          • Fix #71001: 'loading' window at startup does not close if using Qt library version == 5.5
                                                                          • Fix progress bar issues on exporting audio
                                                                          • Fix #71441 add cancel button to zerberus sfz loading
                                                                          • Fix #72491: text properties in lines added by double click
                                                                          • Fix #69866: unable to navigate into next measure in voice 2
                                                                          • Select rest (or top remaining note of chord) on note or rest delete
                                                                          • Ambitus: Ignore non-played notes
                                                                          • Fix #50686: problems with slurs crossing to higher staves
                                                                          • Fix #74021: crash on transpose with frame text selected
                                                                          • Fix #73821: toggle rhythmic slash notation does not follow links
                                                                          • Fix #73801: SECTION_BREAK on non-measure MEASURE_BASE does not reset measure numbering in next section
                                                                          • Fix #63041: editing spanner length with tuplets
                                                                          • Fix #73051: editing spanner length with multiple voices
                                                                          • Fix #70416: crash on 2-note tremolo of unbeamed 16th or shorter
                                                                          • Delete audio files on cancel when exporting audio
                                                                          • Fix #73966: bad system spacing with lyrics or spacers at page break
                                                                          • add text style type in Inspector
                                                                          • Fix #74881: crash on copy of rest into mmrest
                                                                          • Fix #22994: cross-staff grace note layout
                                                                          • Fix #58061: partial beam wrong direction in tuplets
                                                                          • Fix #75116: Add a break page by dragging it in an empty space in a score with hidden empty staves causes a crash
                                                                          • Fix #74951: hairpin appears to remain selected
                                                                          • Fix #74961: initial octave guess on note input wrong after mmrests
                                                                          • Fix #75861: crash adding timesig to note or rest on page >1
                                                                          • Fix #81456: timesig paste fails
                                                                          • Fix #53271: Beams retain slope when spanning rests
                                                                          • Fix #84296: bad import of certain chord symbols
                                                                          • Fix #84676 - Figured Bass continuation line thickness and vert. pos.
                                                                          • Fix #84806: crash adding note that creates tie in tab staff
                                                                          • Do not update Inspector if not visible. Reduces delay / lag of selecting an element.
                                                                          • Fix #83441: crash on paste of chord symbols past end of score
                                                                          • Fix #74746: diatonic transposition produces tpc corruption with transposing instruments
                                                                          • Fix #83266: Repeat measure from MuseScore 1.3 is not imported correctly in MuseScore 2
                                                                          • Limit tempo when follow text is active, allow trailing space in tempo text
                                                                          • Fix #82671: Copy pasting a single lyric syllable doesn't work
                                                                          • Fix #81501 : copy/paste containing HTML name issue
                                                                          • Fix #81371: crash/hang with frames at end of score
                                                                          • Fix #78066: add 'bass' and 'pedal' chord symbols
                                                                          • Fix #76531: handling of spaces within chord symbols
                                                                          • Fix #77366: crash adding cross-staff tie
                                                                          • Fix #78231: crash pasting chord symbol onto fret diagram
                                                                          • Fix #91271: Crash on save after creating new part from score with connecting barlines with parts selected in bottom-to-top order
                                                                          • Fix #31676 Play first note when moving multiple notes with same pitch and tuning.
                                                                          • Fix #103646: Crash after copy-paste linked measures before a system change with multimeasure rests
                                                                          • Fix #103156 Fix #74871: fixed unpredictable behaviour of adding self created time signature, fix selection of added time signature in Master Palette
                                                                          • Fix #103886: slur creation between grace notes and main notes
                                                                          • Fix #81716 update stringData frame upon instrument selection
                                                                          • Fix undo of linked staff addition when part is present
                                                                          • Fix #94911 Crash after deletion of a linked staff in a score with parts
                                                                          • Fix #99796: Linked staff becomes unlinked (causing corruption) after delete of part
                                                                          • Fix #89636, Fix #94911, Fix #70226, Fix #91351: unlink the right staves when deleting a part, or deleting a linked staff. Do not store several times the same staves in linkedStaves
                                                                          • Fix #8360: Transpose by Key doesn't transpose by perfect octaves (when transposing up or down)
                                                                          • Fix #102071: sym not processed in line properties
                                                                          • Fix #101916: undetected conflict with standard keys
                                                                          • Fix #71256: Updating Bagpipe Embellishment pitches and instrument range for correct displaying
                                                                          • Fix #102236: Palettes menu entry not translatable
                                                                          • Fix #88741: selection lost after insert measure with mmrests enabled
                                                                          • Fix #89576: reset spanner segments in range selection on Ctrl+R
                                                                          • Fix #99221: corrupt undo of delete range starting with mmrest
                                                                          • Fix #91471: alternate fix that also improves undo behavior
                                                                          • Fix #91471: layout issues and crash on system with hbox only
                                                                          • Proper error messages when pasting in local time signature or tremolo
                                                                          • Cheap partial fix for #51626: disallow copy/paste with local time signatures
                                                                          • Fix #62341: transpose chords on staff transposition change
                                                                          • Fix #78636: insert before frame fails
                                                                          • Fix #101386: crash on undo of add with inspector not shown
                                                                          • Fix #100481: "Reset Beam Mode" on selection, or entire score
                                                                          • Fix #100406
                                                                          • Properly close startcenter when a score is opened from a link
                                                                          • Fix #101371: comment out the help engine initialization
                                                                          • Fix #100626: crash on copy that removes slur
                                                                          • Fix #99236 remove mscoreGlobalShare/sound from soundfont path
                                                                          • Fix #98756: Scaling of symbols in part set to scaling of full score
                                                                          • Fix #21448 Fix #98826 note input cursor ignores the staff scaling
                                                                          • Fix #98761: Deselecting a staff not possible via shift +up/down
                                                                          • Fix #87331: crash on full measure rest command with mmrest
                                                                          • Fix #98711: Crash on startup if displaying Start Center with 1.3 scores
                                                                          • Fix #63856: don't move rehearsal mark to beginning of system
                                                                          • Position fingering relative to accidental
                                                                          • Fix #95826: avoid crash when switching scores while in edit mode
                                                                          • Fix #88221: crash on create tuplet with hyphenated lyric
                                                                          • Fix #88061: bad staff spacing with lyrics in multiple voices
                                                                          • Fix #95051: bad melisma layout after hbox
                                                                          • Fix #97931: system initial barline type lost on reload
                                                                          • Fix #84156: ottava drawn to measure rest with notes in other voices
                                                                          • Fix #72721: don't show invisible lines if 'show invisible' is turned off
                                                                          • Fix #78421: Time Signature dialogs use Emmentaler and MuseScore 1 background color instead of Bravura and MuseScore 2 background color
                                                                          • Fix #53696: Export as audio gets stuck at 99% with some file and some soundfont
                                                                          • Fix #96971 suppress benign make release warnings
                                                                          • Fix #95636 changing first tick of a Spanner should update its index in the SpannerMap
                                                                          • Fix #97826: extra distance scaled incorrectly on reload
                                                                          • Fix #96951 remove debug warnings by explicitly casting enums to int
                                                                          • Fix #96626 signed chars for MidiMapping, StaffTypes, TextStyleType
                                                                          • Fix #96246: crash removing null lyric
                                                                          • Fix #5098: tpc corruption on copy of note
                                                                          • Fix #95461: add full measure rest in note input mode
                                                                          • Fix #95866: crash on export of fretboard diagram
                                                                          • Fix #95951 use signed chars for BeamMetric to fix ARM type limit issue causing long stems
                                                                          • Fix #95351, Fix #93131, also fix a crash when changing page arrangement with no score opened
                                                                          • Fix #92331: following chord deleted after voice change
                                                                          • Fix #95226: printing problems when using pageOffset
                                                                          • Fix #93006: layout shift due to overestimating size of courtesy signature
                                                                          • Fix #25763: allow full measure rests to be created in voices > 1
                                                                          • Prevent possible crash when cloning spanners
                                                                          • Fix #95076: Crash after a copy-paste chord symbols and Undo
                                                                          • Fix #33541: some elements can get marked invisible, but this doesn't get saved, so is lost on reload
                                                                          • Fix some texts for translation
                                                                          • Fix #93316: slur still lays out to deleted note
                                                                          • Fix #81731: Crash when repeatedly pressing Shift+A
                                                                          • Fix #84351: Crash when saving with instrument name selected and continuous view
                                                                          • Fix #93911: & in Volta text corrupts score
                                                                          • Fix #89951: preserve key signature when deleting first measure
                                                                          • Fix #89401: delete first measure removes timesig from parts
                                                                          • Fix #93946 : reset text to style in inspector not working for dynamics
                                                                          • Fix #94711: Crash when saving after deleting a staff from grand staff in score with parts
                                                                          • Fix #75311: Shortcut conflict, 'p' dynamic glyph and Plugin Creator
                                                                          • Fix #90766: bad layout with hbox at end of system followed by mmrest
                                                                          • Fix #86916: don't translate drumset shortcuts
                                                                          • Fix #90811: allow dots in filenames
                                                                          • Fix #91911: crash customizing palette with 'More Elements' enabled
                                                                          • Fix #92626: corruption when removing all existing staves and adding new ones
                                                                          • Fix #74801: Custom palettes not working on OS X
                                                                          • Fix copy/paste & palette add for figured bass & lyrics
                                                                          • Fix #91536: crash adding figured bass to palette
                                                                          • Fix #88746: unable to save files
                                                                          • Fix #88756 - Disable unnecessary actions in text editing states
                                                                          • Cheap Fix #88291: disable shift+left/right in cases where it fails
                                                                          • Fix #85641: preserve fingering user offset on paste
                                                                          • Fix TremoloBar drag&drop
                                                                          • Fix #86196: License text displayed in a hard to read font on Windows
                                                                          • Add property button to Bend and Fretboard Diagram in inspector
                                                                          • Fix #85781: allow slur and tie selection by voice
                                                                          • Fix #76006 append first measure before perform minWidth2() calculation
                                                                          • Fix #72051 : reset text to style causes HTML escaped sequences to disappear
                                                                          • Fixes #19155, #22861, #23100, snap glissando to notes, ability to add parallel glissandi.
                                                                          • Fix #74946: crash on paste with end segment in mmrest
                                                                          • Fix #78216 no courtesy key or time sig if section ends on non-measure
                                                                          • Fix #78196 courtesy clefs should not display on final measure of section if section break occurs on subsequent non-measure MeasureBase frames
                                                                          • Fix #83286: unable to tie with grace note in higher numbered track of instrument
                                                                          • Fix #71901: layout of cross staff seconds
                                                                          • Fix #75826: barline offset not saved
                                                                          • Fix #78261: text style not honored when adding repeat via double click
                                                                          • Fix #21950: Crash in Debugger, Layout button, in experimental mode (-e)
                                                                          • Fix #104171: Crash by flipping an articulation or ornament on a grace note
                                                                            Fix #84876: extend selection to left with last measure selected

                                                                          Playback

                                                                          • Fix #19871: no swing on tuplets
                                                                          • Fix #71826 added test case, glissando playback was confused about which staff to measure line in
                                                                          • Fix #72091: sf2 volume discrepancies caused by attenuation handling, thanks @jimbo1qaz for the investigation in PR #2152
                                                                          • Improve sfz parser for ivyAudio piano
                                                                          • Fix #73531 ending measure has jump and repeat
                                                                          • Fix #73486 #73496 rewrite jumpToStartRepeat condition evalation reordered
                                                                          • Fix #65161 repeatlist unwind section by section
                                                                          • Fix loop final repeat marks ignored - #75566
                                                                          • Fix #100791: Wrong tempo after fermata if tempo change added in front

                                                                          Instruments

                                                                          • Fix typo in instruments.xml. see PR #2149
                                                                          • Fix Erhu channel.
                                                                          • Fix Tin Whistle short name
                                                                          • Fix barbershop template's upper range of bari/bass staff
                                                                          • Fix #103991: transpose some bugles and fix their clef

                                                                          Albums

                                                                          • Album::createScore now tries to append all excerpts for each score.
                                                                          • Album: join only the scores and not the parts if the number of linked parts is different
                                                                          • Fix #78521 prevent segfault when append scores without any measures
                                                                          • Fix memory leak in Album()
                                                                          • Fix #76101 join score w/ generated initial clef

                                                                          Piano roll

                                                                          • Fix #100536 [Feature Request] pitch up/down feature in the piano roll.
                                                                          • Fix #100551 : [Piano Roll] Unable to select a note that contains some events when it is sandwiched between normal notes.
                                                                          • Fix #100636 : [Piano Roll] The score view doesn't paint correctly when selection in the piano roll changes.

                                                                          i18n

                                                                          • Add Irish language
                                                                          • Add Serbian Cyrillic (sr_RS) language (see #87871)
                                                                          • Fix #83276 set global layout direction for right to left languages
                                                                          • Use local encoding for Portaudio device and api and so display correctly chinese devices

                                                                          Plugins

                                                                          • Expose globalDuration to scripting
                                                                          • Make user home directory accessible to plugins
                                                                          • Fix #96631 Expose TextStyleTypes to QML
                                                                          • Fix #100181 update internal segment reference of cursor after addNote update plugins after fixing input position in Cursor.addNote added initial test run for cursor
                                                                          • Fix #90891: corrected references to first and last segment for QML definition
                                                                          • Static functions currently not callable from QML see also https://musescore.org/en/node/93976#comment-415076
                                                                          • Fix #93976 wrapper function for Ms::Score::firstSegment supporting QML and Ms::TimeSig::setSig
                                                                          • Fix #95821 expose result of Score::tempo(tick) as Cursor.tempo

                                                                          Tablature

                                                                          • Fix #69846, #69821, #63561 - multi-voice TAB's: stem and slur positions
                                                                          • Fix #71931 - TAB: Option to show or hide back-tied notes
                                                                          • Fix #70906 - TAB: slurs between stems not centred
                                                                          • Fix #73876: grace note cursor in tablature
                                                                          • Fix #74816: No Playback of articulations in Tablature staff
                                                                          • Fix #74561 - TAB: slurs attached to note heads with stems beside staff
                                                                          • Fix #79716 - TAB: staff scale and length of unbeamed stems beside staff
                                                                          • Fix #69271: arpeggio manual adjustments not saved for tab
                                                                          • Fix #71076: Make flag symbols unselectable in tab
                                                                          • optimize slur layout in tab, see https://github.com/musescore/MuseScore/pull/2182#issuecomment-134987264

                                                                          High DPI

                                                                          • Fix exampleview.cpp for high DPI screens
                                                                          • Fix note_groups.ui for high DPI screens
                                                                          • Fix #95466: wrong size palettes with 0.8 scaling when using 120 DPI display
                                                                          • Fix #94856: some palettes too small on high DPI displays
                                                                          • improve drawing of radiobutton on retina display

                                                                          MusicXML import/export

                                                                          • Fix #98136 - [MusicXML import] extra instrument when importing multi-instrument part starting with rest(s)
                                                                          • Fix #96386 - [MusicXML import] testSlurs2.xml failure
                                                                          • Fix #95366 - [MusicXML export] end repeat missing in multi-measure rest
                                                                          • Fix #85786 - Export then import of specific MusicXML file gives score with no notes
                                                                          • Fix #69566 - orruption importing MusicXML file with irregular triplet
                                                                          • Fix #70236 - import properly from MusicXML files with no staff names
                                                                          • Fix #72206: [MusicXML] Corrupted import if key signature is no minor or major
                                                                          • Fix #25982 - invalid MusicXML when instruments are missing from drumset
                                                                          • Fix #72211: [MusicXML] Import of Harmony and Forward/Backward create corrupted file
                                                                          • Fix #71876: MusicXML file import causes crash
                                                                          • Fix #59291 - [MusicXML export] System-crossing clef change not exported
                                                                          • Fix #46861: [MusicXML] Add support for melisma in import and export
                                                                          • Fix #59811 - Fermata over rest not exported to MusicXML
                                                                          • Set normal-type for MusicXML tuplets with unusual ratio
                                                                          • Fix #92871 : MusicXML notehead -filled- element not imported/exported
                                                                          • Fix #86636 : MusicXML import of tuplets yields elements with zero duration
                                                                          • Fix #14884 repeat start or repeat end on single measure is correctly imported from MusicXML files
                                                                          • Fix #92306 - crash when importing MusicXML with invalid time sig
                                                                          • Fix #88376 - MusicXML export does not export clefs after removing first measures
                                                                          • Fix #94596 - MusicXml - Lyric sylable output twice
                                                                          • Fix #93031 - invalid MusicXML for stafftext containing only formatting
                                                                          • Fix #18144 - MusicXML straight arpeggio don't export
                                                                          • Fix #43756 - export fingering to musicxml format is not correct

                                                                          Other format import (GP, MIDI, Capella Ove)

                                                                          • Fix drum clef import in ove
                                                                          • Fix #20911: [Capella import] file with title results in several vertical frames, 2 containing nothing but a #
                                                                          • Fix #86921: Dots are not displayed in .gpx format
                                                                          • Fix #88021: Time signatures with compound-time are corrupted in .gpx format
                                                                          • GP6, do not try to import grace notes for now. Simple fix for common anacrusis.
                                                                          • Fix #88036: In a multivoices context, Voices 2-3-4 are lost in the .gpx format
                                                                          • Fix #98751: [GP6] Nylon guitar imported with the piano sound
                                                                          • Fix #99746: [GP6] Import of double dot causes infinite stems and leads to a crash
                                                                          • Fix #85856: MIDI import - better handling of Yamaha SG SysEx block

                                                                          SVG Export

                                                                          • Fix #86686 9 SVG Export Improvements
                                                                          • Clean up exported svg, remove redundant g elements

                                                                          Development

                                                                          • Linux AppImage nightlies for x86_64, x86 and arm, thanks to @shoogle and @ericfont
                                                                          • Fix #57736 and improve Debian packaging to enable Ubuntu nightlies
                                                                          • Fix #72731 win32 large-address-aware
                                                                          • Make release tests pass
                                                                          • Fix for arm, where char by default is unsigned
                                                                          • Fix #76331: Linux Makefile uninstall target doesn't remove directories
                                                                          • Fix #76326: build only uses one processor core on Linux
                                                                          • Fix #72061: different splash image for development builds
                                                                          • fix compilation without script interface
                                                                          • Add freetype-2.6.1 as thirdparty
                                                                          • Fix #92521: make pulseaudio support optional

                                                                          Thanks to

                                                                          • awelch83
                                                                          • ABL
                                                                          • riban
                                                                          • cammyvee
                                                                          • CombatCube
                                                                          • ericfontainejazz
                                                                          • Fyrult
                                                                          • Jojo-Schmitz
                                                                          • jeetee
                                                                          • Leon Vinken
                                                                          • Marc Sabatella
                                                                          • mjszczep
                                                                          • Miwarre
                                                                          • Pierre Colot
                                                                          • sraduvictor
                                                                          • fbrauchle
                                                                          • syrma
                                                                          • salil K
                                                                          • thomasa88
                                                                          • WASam
                                                                          • luyikai
                                                                          • IsaacWeissCardshark
                                                                          • abhinav_
                                                                          • emeric
                                                                          • Heslil Inc.
                                                                          • heuchi
                                                                          • jim.newton.562
                                                                          • lasconic
                                                                          • pgkos
                                                                          • shoogle
                                                                          • shredpub
                                                                          • sideways
                                                                          • vgStef
                                                                          • wschweer
                                                                          • yeking
                                                                          • akhilesh
                                                                          • cadiz1
                                                                          • ChurchOrganist
                                                                          • mschorsch thank you for the drumline soundfont!
                                                                          • Gootector
                                                                            and many others who provided translations and support material!

                                                                          Release notes for MuseScore 2.0.2

                                                                          MuseScore 2.0.2 was released July 16, 2015.

                                                                          Features

                                                                          • The first book for MuseScore 2 is released: Mastering MuseScore
                                                                          • Playback of trills and other ornaments as well as glissandi and bends, with controls to customize or disable the effect
                                                                          • New templates: various classical chamber groups, vocal ensembles, orchestras, and concert band
                                                                          • Palette improvements: clefs, key signatures, time signatures, lines, and other palette elements that formerly required drag and drop can be added to a selected range via double click
                                                                          • Search box in Symbols palette
                                                                          • Zoom to 100% shortcut (Ctrl+0)
                                                                          • Tremolo rendering improvements
                                                                          • New symbols: treble clef with parenthesized octave indicator, pedal line with release symbol
                                                                          • Improvements to Bravura and other music fonts
                                                                          • Improvements to the default FluidR3 soundfont

                                                                          Misc. bug fixes

                                                                          #69161: [GP] Issue with barlines in Bass parts
                                                                          #45221: Layout changes after action
                                                                          #32886: In Continuous View, the last visible measure is moved under the continuous panel
                                                                          #68131: Stave properties window cannot be resized (and default size needs to be "minimum")
                                                                          #37346: Can't enable Pan roll during playback
                                                                          #68041: Zoom to 100% command (and shortcut)
                                                                          #68331: Lines other than ottavas should not start at accidental
                                                                          #68466: Lines in empty measures change length on toggling multimeasure rests
                                                                          #63176: Note input cursor glitches for voice >1 when advancing into gaps
                                                                          #68956: Barlines disappear in one-line drum staff when reducing span - new when hiding/unhiding staves
                                                                          #68921: Reordering instruments within barline spans creates "custom" barlines that won't extend properly
                                                                          #41786: Bar lines too short in tablature after amending linked (or not) staves.
                                                                          #68946: metatag $n in PDF of parts+score should be constant equal to total number of pages, not cumulatively increasing with each part
                                                                          #60791: A time signature change deletes all voices >1 in Tab staff with linked staves
                                                                          #67516: Add traditional Ped / * line to Advanced palette
                                                                          #67621: Repeat dots show on hidden / empty staves for multi-staff instruments
                                                                          #65996: Creating joined score with less instruments/staves in subsequent scores vs. the first yields corrupt score
                                                                          #67031: Copying measure with gliss spanning into next bar copies gliss but doesn't display it
                                                                          #67836: Transposition of score by key gets incorrect interval if first stave is unpitched
                                                                          #60491: Frames can be set to have 0sp height or width, but this is not saved
                                                                          #66576: Opening a score createted via "Save selection" of a linked staff causes a crash
                                                                          #66321: Some default bends type are badly displayed
                                                                          #59301: Deleting measure with clef change corrupts clef map
                                                                          #63231: Changing "Actual Measure Duration" under a volta causes crash
                                                                          #66441: Continue last session plus StartCenter doesn't work
                                                                          #65786: Crash or loss of data on save/reload on paste to text frame
                                                                          #54221: Horizontal frame before last measure of system creates crowded layout
                                                                          #29686: Positioning, angle and length of tremolo between notes incorrect
                                                                          #45356: manual position of a line (8va, cresc., etc.) not preserved on copy/paste
                                                                          #66776: "V" shortcut does not affect the ties and slurs which extend on the following system
                                                                          #64141: Add "Whole note = n" to tempo texts
                                                                          #65066: Score elements not deselecting after "select all" option
                                                                          #66826: Key change not displayed at start of system with "Generate key signatures" off
                                                                          #67026: Parts do not pick up articulation applied with keyboard shortcut
                                                                          #62091: Musescore crashes when selecting all notes and switch to voice 1
                                                                          #67001: Crash on opening file with apparently invalid note anchored textline
                                                                          #66946: Null/Empty/Invalid Jumps should either not interfere with playback or should report error
                                                                          #58821: Shift+left arrow key from single selecion before multimeasure rest leads to range selection up to end of score
                                                                          #63961: "Fake" barlines on score missing on some instrumental parts and disappearing completely after a save.
                                                                          #60871: Adding Time Signature at Clef change ignores new clef while still showing it
                                                                          #64251: Adding ornament on tablature causes crash
                                                                          #66076: When entering note too long for measure, tie not created in linked staves/parts
                                                                          #65861: Copy paste of single chord symbols does not transpose
                                                                          #65421: straight arpeggio down plays notes in wrong order
                                                                          #66276: My First Score shifts from A4 to Letter after load in USA (or Canada?)
                                                                          #66241: Grace note offsets in linked TAB not saved
                                                                          #66061: A score creation with two instruments and linked staves is corrupted immediatly after entering a note
                                                                          #65961: Dotted Line to Anchor Text
                                                                          #65831: Links and manual adjustments to bends not saved
                                                                          #65116: Metronome is wrong if 4/4 after 2/2 (equivalent time signature)
                                                                          #65041: Breath marks cause spacing problems with chord symbols
                                                                          #64961: Drum parts have the same MIDI port
                                                                          #64911: Repeats display with space when clef is removed
                                                                          #64861: Linked tablature fret with dot doesn't display bracket
                                                                          #64856: Accented characters at beginning/end of lyrics ignored with respect to alignment
                                                                          #64696: [MusicXML] Wrong midi port when exporting Instrument Change
                                                                          #64506: Repeat measure reports as corrupt when saving online, corrects itself on save / reload
                                                                          #64266: Fretboard diagrams do not remain attached to staff at the correct location
                                                                          #64241: D.S. from within repeat bars to a Segno outside crashes on playback
                                                                          #64206: Repeat Measure sign in one staff of multi-stave inst. causes repeated playback of all staves
                                                                          #64201: [MusicXML import] corruption caused by whole-measure rests with type whole
                                                                          #64041: Problem writing -^b9
                                                                          #63096: Text not kept when moving (cut-paste) an existing rehearsal mark
                                                                          #63786: Tuplet text style applies only after save and reload
                                                                          #63711: No naturals appear for change to open/atonal key signature
                                                                          #63706: Dynamics and Tempo: reset to style in text properties produces a wrong result
                                                                          #63676: Follow text for tempo should work if the style of the text is changed
                                                                          #63561: TAB - Modified stem direction - don't work properly
                                                                          #63481: Symbol lines and symbols ignore small staff size
                                                                          #63366: Naming new workspace: slash, asterisk, etc. not escaped or filtered; write of workspace file fails
                                                                          #63081: Crash in repitch mode entering note in voice >1 with no chord/rest at cursor
                                                                          #62506: [MusicXML import] crash editing The Stolen Child full score.xml
                                                                          #62236: Apparent corruption on copying a two-note tremolo across a barline
                                                                          #61476: Corruption reading empty measure with 7/4 actual duration
                                                                          #61061: Crash when scrolling in panoramic view and mmRest
                                                                          #60931: Deleting multiline text in frames cause crash
                                                                          #60891: Split a measure by selecting a rest or note beginning on the first beat causes corruption
                                                                          #59226: [Musicxml import] crash if notations on rest
                                                                          #59161: Crash on importing 1.x score with slur without start chord
                                                                          #63641: Hitting Enter in Page Settings with "OK" button highlighted instead does "Apply to all Parts"
                                                                          #62961: Double-clicking hairpin in palette with list selection causes X number of hairpins to all be stacked at the exact same position
                                                                          #62956: Regression in MuseScore 2—clicking note then shift-clicking measure leads to list selection instead of range selection
                                                                          #62276: Viola da gamba in 2.0 missing pizzicato and tremolo channels
                                                                          #61106: "Reset Stretch" Does not affect mmrests if more than mmrest is highlighted
                                                                          #60746: Symbols appear at wrong height for staves > 1
                                                                          #60651: Fret conflict shouldn't be exported to PDF or printed
                                                                          #60631: 2.0 nightly - No line number reported in MSCZ XML errors
                                                                          #60571: Select similar spanners in a range selection doesn't work
                                                                          #60486: Color of voice selector in Staff Text Properties is not the same than in toolbar
                                                                          #59766: Stems do not align with DO and TI note head
                                                                          #59316: Instruments marked invisible should not get shown in the create excerpts dialog
                                                                          #49246: Some elements duplicated on time sig change
                                                                          #53081: Respell pitches mode adds note to chord when input is by mouse.
                                                                          #59861: Tick "stemless" in measure properties for an irregular triplet and dotted notes causes a crash in Tab staff
                                                                          #59176: crash when running "Add/Remove Line Breaks" against score or part with multi-measure rests turned on
                                                                          #58971: Changing voice of grace notes creates corrupted score
                                                                          #58926: Pasting image causes a crash
                                                                          #59171: Pressing a key in Piano Keyboard window sustains indefinitely (if sound supports it)
                                                                          #59881: Check "stemless" in Measure Properties works badly in Tab staff
                                                                          #59821: shift+letter adds note according to current cursor position rather than position of added note
                                                                          #58796: Bracket and instrument name misaligned to one-line staff
                                                                          #57261: multi-notes tremolo not played back correctly
                                                                          #50011: Continuous View—part names overlap
                                                                          #43181: First instrument names misplaced in continuous view when barlines are joined

                                                                          Release notes for MuseScore 2.0.1

                                                                          MuseScore 2.0.1 was released May 5, 2015.

                                                                          Features

                                                                          • Allow voltas on all staves
                                                                          • #14910: Piano Keyboard doesn't show notes during playback
                                                                          • New "Getting Started" tutorial score
                                                                          • #56786: Allow the bends input in a standard staff
                                                                          • #54761: Easier way to search an item in shorcut list
                                                                          • Add palette context menu to enable single palette mode
                                                                          • Play chords out of note input mode

                                                                          UI

                                                                          • Display "Report a bug" and "Copy" button in About box
                                                                          • Fix "copy revision" button in About box on Retina display
                                                                          • Move Add button in time signature dialog in the same corner than in the key signature dialog

                                                                          Templates and instruments

                                                                          • Add Chamber Music templates
                                                                          • Custom template files are now in the second category
                                                                          • Add Violins, Violas, Violoncellos and Contrabasses
                                                                          • Add Ukulele and Ukulele Tablature to the list of common instruments
                                                                          • Better abbreviations for Euphonium, Tuba, and Double Bass

                                                                          Debug

                                                                          • Add command line option -w to disable the webview in startcenter
                                                                          • Add command line option to create template
                                                                          • Add originalFormat as metatag when importing a file

                                                                          Misc. bug fixes

                                                                          • Fix #58706: Regression in MuseScore 2—Em dash (—) not supported
                                                                          • Fix #58646: Pinch to zoom (on touch screen) results in net zero zoom
                                                                          • Fix #54691: SHIFT-<NOTE> adds note to same octave when key signature contains flats
                                                                          • Fix #7886: [trunk] Section break and courtesy clef
                                                                          • Fix #58496: Section break doesn't reset courtesy time sig
                                                                          • Fix #58481: A time signature change with an attached image to the staff may cause problems
                                                                          • Fix #58231: Crash changing text style on empty lyric
                                                                          • Fix #57646: Segment-attached element in Voice 2 causes corruption in Voice 1 on copy and paste
                                                                          • Fix #57756: Crash when deleting time signature when vertical frame is present
                                                                          • Fix #57556: Arrow key / transpose (and others) commands don't obey selection filter
                                                                          • Fix #57496: Section Break pause properties don't stick if set to 0.00sec
                                                                          • Fix #57861: [XML and CAPX Import] An & in the partname or in a staff text of MusicXML or CAPX file results in unloadable MuseScore file
                                                                          • Fix #57431: Courtesy time signature not created when changing time signature
                                                                          • Fix #57436: Undo from common to cut time time sig displays 2/2
                                                                          • Fix #57226: Crash pasting chords symbols from different staves
                                                                          • Fix #56951: Starting playback with repeats in a certain order causes a crash
                                                                          • Fix #55411: Cross-staff tuplet number collision avoidance is incorrect
                                                                          • Fix #56876: Load Album dialog sometimes shows scores, not albums - and vice versa
                                                                          • Fix #56536: "Break every X measures" tool does not operate on the last measure in selection
                                                                          • Fix #23473: Notes and rests shorter than 128th do not display or copy properly
                                                                          • Fix #53481: FreeSerif font included with MuseScore is missing italic
                                                                          • Fix #53341: Undo doesn't works after appending a frame
                                                                          • Fix #51761: Slurs & lines disappear or move in the non-rewritten measures on add of time signature
                                                                          • Fix #55446: Split staff in parts with slur causes a crash
                                                                          • Fix #53266: Corruption pasting into a sequence that ends in the middle of a tuplet
                                                                          • Fix #56191: Crash playing score with ties and tremolo
                                                                          • Fix #53161: Notes created by extending chord over barline are not tied to the correct notes
                                                                          • Fix #53461: Respell Pitches command changes only concert pitch spelling, regardless of current state
                                                                          • Fix #54346: Clef in part is offseted when system text is present in pickup
                                                                          • Fix #52506: Split Staff on particular slur crashes MuseScore
                                                                          • Fix #54556: Multimeasure clef position bug
                                                                          • Fix #54766: Not able to move fret to maximum when using Up arrow key
                                                                          • Fix #54506: Infinite program loop while playback with looping tie of death
                                                                          • Fix #51886: Enharmonic change made using "J" on concert pitch instrument not saved
                                                                          • Fix #54196: Regression after 2.0 - Score with pickup measure are corrupted when reopen
                                                                          • Fix #51881: Measure number mode not preserved on save/reload
                                                                          • Fix #53196: Chord Symbols on Multi-Measure Rest NOT Transposed to/from Concert Pitch
                                                                          • Fix #52936: 8va with Bravura or Gonville not read correctly
                                                                          • Fix #52386: symbols added to "Repeat measure sign" measure will disapear on reload (win & linux 2.0)
                                                                          • Fix #53751: Shorten stem are not read correctly
                                                                          • Fix #53931: Customised slide position is not read correctly.
                                                                          • Fix #52926: Tremolo position
                                                                          • Fix #54216: Crash when creating new score using empty custom template
                                                                          • Fix #53506: MuseJazz font line spacing too wide
                                                                          • Fix #53761: cross-staff beam too short
                                                                          • Fix #52841: No sound feedback in repitch mode when using MIDI or Piano Keyboard
                                                                          • Fix #42356: Pedal playback remains on if pedal line ends at closing repeat bar
                                                                          • Fix #53631: "Export Parts" generates a "Score_and_Parts" in a continous view.
                                                                          • Fix #53696: Export as audio gets stuck at 99% with some file and some soundfont.
                                                                          • Fix #53406: Technique text style should be spatium dependent
                                                                          • Fix #51876: Crash navigating into multimeasure rest using Measure Properties
                                                                          • Fix #51201: Voltas don't respond to CTRL-R
                                                                          • Fix #52131: REGRESSION: Preferences | Shortcuts: Detection of conflicts ignores shortcut states
                                                                          • Fix #51721: Staff miscentered vertically when set to 1 line musescore 2.0
                                                                          • Add controller read in PortMidi driver

                                                                          Plugins

                                                                          • Make setVisible undoable
                                                                          • Fix crash in Score::appendPart()
                                                                          • Expose Excerpt to plugin framework
                                                                          • Allow for flag created to be unset for imported scores
                                                                          • Add access to MIDI channel information
                                                                          • Added modifiedTime() to FileIO
                                                                          • Fix #56221: Can't close a score from within a plugin
                                                                          • Fix #56216: Can't save a score from within a plugin
                                                                          • Expose Rest::isFullMeasureRest() to plugins
                                                                          • Expose Spanner::startElement() and ::endElement
                                                                          • Let a plugin know about its own path

                                                                          MuseScore 1.3 compatibility

                                                                          • Fix #58571: Rehearsal marks in scores created in previous versions of MuseScore not treated as such
                                                                          • Fix possible infinite recursion for old scores containing tie to same note
                                                                          • Fix #56146: Bad layout on load of 1.3 score with incorrect tick tag on symbol

                                                                          MIDI import

                                                                          • Fix wrong track order of MIDI channels
                                                                          • Fix #57651: Crash on paste of tuplet in imported MIDI file
                                                                          • Fix #56651: Crash when importing/previewing MIDI files with high division value
                                                                          • Fix #53121: Midi import chooses accidentals poorly (for this file)
                                                                          • Fix #44226: Initial key signature not transposed via dialog on imported MIDI file

                                                                          Other imports

                                                                          • Overture: Several improvements : Tempo text, poet, copyright, visibility
                                                                          • Overture: Fix crash on grace notes
                                                                          • Capella: Fix #52616: [Capella import] MuseScore stops reading Capella files at <barline>...<\barline>

                                                                          MusicXML

                                                                          • Fix #58596: [MusicXML import] incorrect layout slur to grace note
                                                                          • Fix #55501: [MusicXML import] crash if midi-instrument is missing from drum set part
                                                                          • Fix #18620: [MusicXML] Small notes not exported
                                                                          • Fix #55436: Crash when trying to edit a percussion part from a MusicXML file
                                                                          • Fix #53346: [MusicXML import] incorrectly cannot handle the time elements "symbol=normal" attribute
                                                                          • Fix #53936: Incomplete MusicXML text attributes for 7sus4 chords

                                                                          Translations

                                                                          • Make some more text translatable
                                                                          • Update translations

                                                                          Playback

                                                                          • Fix several repeat bugs with DS, voltas etc... #52511: Musescore 2.0 resolves DC al coda before repeat bars., #23773: After the coda, a repeat mark was a neglected playing.
                                                                          • Add support for 24-bit SoundFont
                                                                          • Fix #56151: Switched instrument not muting on solo
                                                                          • Fix #55416: Cannot load a personal configuration in the synthesizer
                                                                          • Fix #21592: Exported audio doesn't play loaded soundfont
                                                                          • Fix #34286: zerberus exports silence
                                                                          • Fix #52101: Mordent/prall playback ignores key signature
                                                                          • Fix #53261: Crash when playing with lead-in in a score with repeats

                                                                          • Update FluidR3 SoundFont to last version

                                                                            • Add Mellow Yamaha Grand at Bank #8 Patch #0
                                                                            • Fix Alto Sax range issue
                                                                            • Fix Recorder range issue
                                                                            • Tweak tuning for Violin preset

                                                                          MuseScore.com

                                                                          • Change wording of error messages
                                                                          • Check for corruption before upload

                                                                          Release notes for MuseScore 2.0

                                                                          MuseScore 2.0 was released March 23, 2015.


                                                                          MuseScore 2.0 is packed full of new features and improvements.

                                                                          User interface

                                                                          • Continuous view - scroll horizontally through your score with no line or page breaks
                                                                          • Start Center - start-up window which lets you easily pick up your work in progress or create new scores—and includes old MuseScore Connect, which puts a MuseScore composer in the spotlight and links to the MuseScore music sharing website and social media
                                                                          • Inspector panel - easily alter parameters (e.g., positioning) of any element
                                                                          • Piano keyboard - on-screen piano keyboard for note entry
                                                                          • Customizable palettes and workspaces - Basic and Advanced workspaces included by default, or define your own

                                                                          Usability

                                                                          • Selection filter - choose which types of elements to select for copy and paste operations
                                                                          • Re-pitch mode - replace pitches without changing rhythms
                                                                          • Image capture mode - save rectangular selections as graphics
                                                                          • Explode/Implode - separate chords onto multiple staves, or combine multiple staves into chords
                                                                          • More precise manual adjustments - nudge nearly any element any direction with keyboard or Inspector

                                                                          Musical notation

                                                                          • Tablature support - variety of tab notation styles for guitar, bass, lute, and more
                                                                          • Fret diagrams - easily create diagrams and set up your own palette of commonly used chords
                                                                          • Dynamic text styles - changes automatically apply to all elements with that style
                                                                          • New fonts - three musical fonts to choose from, with matching text fonts
                                                                          • Flexible chord symbols - enter chord symbols using any common spellings, including support for German and solfege note naming and lower case minor chords
                                                                          • Slash notation - fill selection with beat slashes, or convert notated rhythms to slashes on, above, or below staff
                                                                          • Layout improvements - automatic correct positioning and spacing for multi-voice chords and rests, dots, accidentals, ties, articulations, hairpins, pedal markings, voltas, etc.
                                                                          • More supported notations - pedal change markings, grace notes after (trill endings), falls/doits/scoops/plops/bends, bagpipe embellishments, figured bass, ambitus, early music notations, more flexible time signatures, and a huge set of additional music symbols from Steinberg's new open source Bravura music font

                                                                          Import/Export

                                                                          • Guitar Pro import - supports GP3, GP4, GP5, and GPX formats
                                                                          • Import PDF - addition of an OMR service to import PDF files
                                                                          • MusicXML import/export improvements - greater compatibility with other applications, ability to control degree of layout to be preserved
                                                                          • MIDI import improvements - automatic simplification of rhythms, handling of multiple voices
                                                                          • MP3 export - in addition to other audio formats WAV, FLAC and OGG
                                                                          • Save online - improved integration with musescore.com for online publishing

                                                                          Playback

                                                                          • New SoundFont - MuseScore's own more realistic Fluid R3
                                                                          • Mid-score instrument changes - play a different instrument on the same staff
                                                                          • Flexible swing style - swing eighth note or sixteenth note, set swing ratio
                                                                          • Built-in metronome - one click to turn on metronome during playback
                                                                          • Improved JACK support - for interoperability with other MIDI and audio programs
                                                                          • Playback of more score markings - crescendo, decrescendo, smart tempo text interpretation, tremolo, mordents, improved repeats and voltas, etc.

                                                                          Score management

                                                                          • Linked parts - changes in score automatically reflect in parts and vice versa
                                                                          • Albums - combine several scores, e.g. multiple movements, into albums
                                                                          • Styles - define and apply custom score styles, select default styles for scores and for parts
                                                                          • Split and join measures - divide measure into shorter ones or combine measures into longer one

                                                                          Accessibility

                                                                          • Keyboard shortcuts - expanded availability of actions and many more shortcuts by default
                                                                          • Documentation - extended handbook, available in print-friendly HTML and as PDF download
                                                                          • Translations - into more than 50 languages, which can receive updates via the web
                                                                          • Screen reader - support for NVDA screen reader (Windows-only) to read the music verbally
                                                                          • Contextual help - new online help (F1) system aggregating online help resources

                                                                          MuseScore 2.0 发布说明

                                                                            (译自 Release notes for MuseScore 2.0)

                                                                            MuseScore 2.0 发布 于 2015 年 03 月 23日。


                                                                            MuseScore 2.0 满载着新特性和改进。

                                                                            用户界面

                                                                            • 联系视图——不带换行或分页地水平滚动您的总谱
                                                                            • 启动中心——入门窗口让您轻松捡起您的作品进度或创建新总谱——并且包括旧的 MuseScore Connect,它将 MuseScore 作曲器放在聚光灯下和链接到 MuseScore 音乐共享网站和社交媒体
                                                                            • 检视器面板——轻松切换任何元素的参数(譬如,定位)
                                                                            • 钢琴键盘——供输入音符的屏上钢琴键盘
                                                                            • 可自定义的符号面板和工作区——默认包括基本和高级工作区,或定义您自己的

                                                                            可用性

                                                                            • 选择过滤器——挑选要选择哪些类型的元素以供复制和粘贴操作
                                                                            • 重定音高模式——替换音高而不更改节奏
                                                                            • 捕获图像模式——将矩形选区保存为图形
                                                                            • 拆分/合并——将和弦分到多个线谱上,或将多个线谱结合为和弦
                                                                            • 更加精确的手动调整——用键盘或检视器往任何方向轻推几乎任何元素

                                                                            音乐记号集合

                                                                            • 支持指法谱——吉他、贝斯,琉特琴和其他各种指法记号集合样式
                                                                            • 品格图——轻松创建图和建立您自己的常用和弦面板
                                                                            • 力度文本样式——改动自动应用于所有那个样式的元素
                                                                            • 新字型——三个音乐字型供挑选,带有相匹配的文本字型
                                                                            • 灵活的和弦符号——使用任何常见拼写来录入和弦符号,包括对德式和唱名音符命名和小写小调和弦的支持
                                                                            • 斜杠记号集合——以拍子斜杠填充选区,或将记谱节奏转换为谱表上、上方,或下方的斜杠
                                                                            • 版面改进——自动为多声部和弦和休止、附点、临时变音号、延音线、运音法、楔形记号、踏板记号、跳房子等等纠正定位和间距
                                                                            • 更多受支持的记号集合——踏板改动记号、后置装饰音(颤音结尾)、坠音/附点/舀音/轻落音/弯音、风笛装饰音、数字低音、音域、早期音乐记号集合、更加灵活的拍号,和来自斯坦伯格的新的开源的 Bravura 音乐字型的附加音乐符号的巨型集合

                                                                            导入/导出

                                                                            • Guitar Pro 导入——支持 GP3、GP4、GP5,和 GPX 格式
                                                                            • 导入便携文档格式——导入便携文档格式文件附加光学记号识读服务
                                                                            • 改进了音乐可扩展置标语言(MusicXML)的导入/导出——与其他应用更加兼容、有能力来控制版面的保留程度
                                                                            • 改进了乐器数字接口(MIDI)的导入——自动简化节奏、处理多声部
                                                                            • 导出动态影像专家压缩标准音频层 3(MP3)——除了其他音频格式,波形(WAV)、无损音频压缩编码(FLAC)和 OGG
                                                                            • 联机保存——为联机出版改进了与 musescore.com 的整合

                                                                            回放

                                                                            • 新的声音字型——MuseScore 自己更加逼真的 Fluid R3
                                                                            • 总谱中途更换乐器——在同一谱表上演奏不同乐器
                                                                            • 灵活的摇摆样式——摇摆八分音符还是十六分音符,设置摇摆率
                                                                            • 内建的节拍器——单击以在回放期间旋开节拍器
                                                                            • 改进对 JACK 的支持——供与其他乐器数字接口和音频程序互操作
                                                                            • 回放更多总谱记号——渐强、渐弱、智能速度文本解释、震音、波音、改进的反复和跳跃,等等

                                                                            总谱管理

                                                                            • 链接分谱——总谱中的改动自动反映在分谱中并且反之亦然
                                                                            • 专辑——将若干总谱,譬如多个乐章结合为专辑
                                                                            • 样式——定义和应用自定义的总谱样式,为总谱和为分谱选择默认样式
                                                                            • 断开和连结小节——将小节划分为更短的或将小节结合为更长的

                                                                            可访问性

                                                                            • 快捷键——扩大动作和多得多的默认快捷键的可获得性
                                                                            • 文档——扩展了手册,以打印友好的超文本置标语言(HTML)和便携文档格式(PDF)下载可获得
                                                                            • 笔译——进 50 多种语言,能通过 web 收到更新
                                                                            • 屏幕阅读器——支持 NVDA 屏幕阅读器(仅限视窗®)以口头阅读音乐
                                                                            • 语境帮助——新的联机帮助(F1)系统聚合了联机帮助资源

                                                                            Release notes for MuseScore 1.3

                                                                            MuseScore 1.3 was released February 28, 2013.

                                                                            MuseScore 1.3 is mainly a bug fix release. Two bugs causing a major nuisance and a dozen of smaller ones have been fixed. No new features have been added. The translations and the handbooks have been updated.

                                                                            Bug fixes

                                                                            Playback

                                                                            • Fix #19148 : Distortion in sound playback after several measures of play due to reverb
                                                                            • Improve the stability of the sequencer and user interface interaction

                                                                            Crashes

                                                                            • Fix crash when loading files with invalid tuplet
                                                                            • Fix crash when exporting parts with voltas
                                                                            • Fix possible crash during MusicXML import
                                                                            • Fix crash when changing voices without valid input state

                                                                            User Interface

                                                                            • Fix #16692 : Save and Save As dialogue boxes fail to open when Title contains colon
                                                                            • Fix last element in file format combo box in the File -> Open Dialog is empty on Mac OS X
                                                                            • Fix Two percussion clefs in palette
                                                                            • Fix #16301 : Verbose program listing in Add/Remove Programs
                                                                            • Change default shortcut for voices to Ctrl + Alt + Voice number (Previous shortcuts were not working on Mac)
                                                                            • Fix small icons on Windows and Mac
                                                                            • Add 1024x1024 icons on Mac OSX for retina display
                                                                            • Fix: Fermata applied to rest isn’t positioned where it was placed until score is saved and re-opened
                                                                            • Better looking new score wizard on Mac OS X
                                                                            • Fix: Two invisible boxes in 'Lines'

                                                                            Updates

                                                                            Installer

                                                                            • Windows binaries are now signed with an Authenticode certificate
                                                                            • Windows installer is also available in MSI format to ease the deployment of MuseScore through Group Policy
                                                                            • Both Windows installers are signed with an Authenticode certificate

                                                                            Plugins

                                                                            • Updated musescore.com “Save online” plugin, cosmetic changes
                                                                            • Updated ABC import plugin, support for larger files

                                                                            MuseScore 1.3 is packaged with Qt 4.8.4 on Windows and Mac OS X.

                                                                            Release notes for MuseScore 1.2

                                                                            MuseScore 1.2 was released March 14, 2012.

                                                                            The focus of MuseScore 1.2 is stability, by reducing bugs. Only a very limited set of new features have been added. Translations and the handbooks have been updated. Estonian and Belarusian have been added.
                                                                            MuseScore Connect has been updated.

                                                                            New Features

                                                                            • New demo score: Reunion by Marc Sabatella
                                                                            • MuseJazz now includes diacritical characters (Thanks to Marc Sabatella and Jorg K)
                                                                            • Jazz Combo and Band templates by Marc Sabatella
                                                                            • Save absolute position of element in addition to "offset" for better upward compatibility with 2.0 version
                                                                            • UK Brass Band & Salvation Army Brass band templates
                                                                            • New drumset file for French drum notation (#14340 )
                                                                            • Ability to move lyrics with left and right arrows
                                                                            • Internationalization of the MuseScore.com plugin ("Save Online") and translation to French, German and Spanish

                                                                            Supported platforms

                                                                            On Mac, MuseScore 1.2 is released in binary form only for Mac OS X 10.6+ running an Intel processor.

                                                                            Bug fixes

                                                                            Playback

                                                                            • fix #11479 : playback swing of quarter notes on counter beat
                                                                            • default reverb/chorus to minimum
                                                                            • fix #10331 : In playback, note(s) do not stop when they should (repeat & note offtime)

                                                                            Style

                                                                            • fix #15147 : Style Page Nums "show first" not checked, 1st page > 1: 1st page number still shown (mi)
                                                                            • fix default style of Frame Text
                                                                            • fix #7017 : german chordnames (H / Bb)

                                                                            Parts

                                                                            • Extract voltas correctly
                                                                            • fix #15059 : save a newly created part doesn't remove the asterisk
                                                                            • fix #13357 : Creating part causes crash (key sig corruption)
                                                                            • fix #12322 : Exported parts close on command without a warning

                                                                            User Interface

                                                                            • remove subbeam button
                                                                            • add Frame Text to Vertical Frame
                                                                            • use English note name in Edit Drumset dialog
                                                                            • change default drumset folder to "templates" dir
                                                                            • fix slur properties dialog title
                                                                            • translation of "staff properties" on instrument name
                                                                            • fix #15228 : add perfect octave up and down
                                                                            • fix #15132 : Create new score and quit/reopen presents incorrect dialog
                                                                            • fix #14648 : Disallow copy of part of tuplets
                                                                            • fix #14992 : Inserting measures corrupts score with tuplets
                                                                            • fix #3482 : pasting after copy/cut creates note with wrong duration
                                                                            • fix #14409 : Crash on copying tuplets
                                                                            • fix #14272 : Add 'Can't open" dialog for unknown filetype
                                                                            • fix #14076 : Add MuseScore.org link in dialog for more recent file
                                                                            • fix #14036 : Background Wallpaper Distortion
                                                                            • fix #13478 : Zoom during playback using shortcuts
                                                                            • fix #13364 : Score tabs disappear
                                                                            • fix #12161 : Changing time signature should change autobeam properties
                                                                            • fix #12084 : Crash when running transpose with title selected
                                                                            • fix translation of context menu on keysig
                                                                            • fix #15283 : Paste and undo causes crash
                                                                            • fix #15460 : Note Names without score causes crash
                                                                            • fix #15461 : Remove Notes without score causes crash
                                                                            • fix #15458 : Break Every X Measures without score causes crash
                                                                            • fix #15457 : Undo Insert Measure after changing clef causes crash

                                                                            Notation

                                                                            • fix #15123 : Measure rest should be shown as breve if measure >= 4/2
                                                                            • fix #14917 : Wrong bracket in nested tuplet
                                                                            • fix #14973 : Transparent and truly vectorial embedded SVG
                                                                            • fix #14429 : Articulations / ornaments in small staves are not small
                                                                            • fix #14420 : Measures long 2/1 or more not cleared to measure rest
                                                                            • add two more chord names: sus#4 & Maj7b13
                                                                            • fix #10552 : no more crash on undo, dynamic created
                                                                            • Incomplete fix #12966 : Measure insert corrupts key changes
                                                                            • fix #5433 : Staff with one line and repeat bars are not aligned
                                                                            • fix #4157 : regression : Natural after a tie across barline
                                                                            • fix #1395 : Accidental after a tied note
                                                                            • fix #12085 : Enharmonics not preserved when toggling concert pitch in part > 1 octave
                                                                            • fix #12218 : shaped noteheads aren't shared
                                                                            • fix #12419 : Ledger lines are still visible for invisible notes
                                                                            • fix #11926 : Pedal marking created in 1.0 are displayed incorrectly in MuseScore 1.1
                                                                            • fix #4893 : Non-removable courtesy clef appears after insert measure before first one
                                                                            • fix #14648 : disallow copy of partial tuplets

                                                                            Import/Export

                                                                            • export MIDI with relative tempo set in Play Panel
                                                                            • fix pedal ending in MIDI export #12642
                                                                            • fix #13107 : bww import: missing bagpipe doublings
                                                                            • fix crash on MIDI import for some files
                                                                            • fix #14064 : crash on Capella import for some files
                                                                            • fix #7352 : basic Triplet support for Capella import

                                                                            Packaging and updates

                                                                            • add "Create desktop shortcut" option in Windows installer
                                                                            • reduce auto update check period

                                                                            MusicXML import and export

                                                                            • reworked MusicXML voice mapper
                                                                            • add dynamic and note velocity support in MusicXML export/import
                                                                            • fix #11927 : Export duplicate chordnames
                                                                            • fix #15129 : Empty measures are not imported
                                                                            • fix #11675 : Crash opening MusicXML from Finale
                                                                            • fix #12276 : Sub-optimal handling of different duration measures on import
                                                                            • fix #12394 : Chordnames are not exported for grand staff
                                                                            • fix #12382 : Key Signature for 2 Staves
                                                                            • fix crash reading MusicXML file with different key signatures on the first and second staffs
                                                                            • add MusicXML testfile for issue #12382 ("Key Signature for 2 Staves")
                                                                            • fix #13183 : Wrong import of right barline
                                                                            • add testfile for #13860 : Support lyrics exported by Sibelius 7
                                                                            • fix #13782 : Errors in Import and Crash after closing
                                                                            • fix #5947 : Slurs is not well placed with grace note
                                                                            • fix #12445 : Import can produce empty voice 1: set (automativally) generated rests to invisible
                                                                            • fix #12349 : Wrong placed slurs after importing a MusicXML file
                                                                            • fix #12445 : Import can produce empty voice 1
                                                                            • fix "variable set but not used" warnings in importxml.cpp
                                                                            • fix #11221 : Don't set "Break multi measure rest" when importing from MusicXML
                                                                            • fix #13860 : support lyrics exported by Sibelius 7
                                                                            • updated MusicXML testfiles: added sound dynamics="..."
                                                                            • fix #14088 : Problem importing triplets from XML if tuplet element is missing
                                                                            • fix #14160 : Problem importing tuplets from XML in a multi-voice context
                                                                            • fix #14118 : Import of tuplets containing chords is incorrect
                                                                            • fix #14692 : import error: 41g-PartNoId.xml causes crash
                                                                            • fix #14693 : import error: 41h-TooManyParts.xml causes crash
                                                                            • fix #14828 : import error: 46a-Barlines.xml: unexpected multi-measure rests
                                                                            • fix #14834 : import error: 45e-Repeats-Nested-Alternatives.xml: repeat start missing
                                                                            • fix #14827 : import error: 32a-Notations.xml: missing notations
                                                                            • fix #14862 : Export notations imported by issue #14827
                                                                            • fix #14819 : import error: 01f-Pitches-ParenthesizedMicrotoneAccidentals.xml imports without microtone accidentals
                                                                            • fix #14818 : import error: 01e-Pitches-ParenthesizedAccidentals.xml imports without double flat in parentheses
                                                                            • fix #14832 : import error: 41d-StaffGroups-Nested.xml: part-group symbol=line not supported
                                                                            • fix #14804 : Bad pitch and alter exported for cross staff note
                                                                            • fix #14418 : Voltas lost when importing MusicXML
                                                                            • fix #14701 : Key signature is not exported from a mscz saved with 1.1
                                                                            • fix #14244 : Export of trill line fails
                                                                            • fix #14825 : import error: 31a-Directions.xml missing dashes and bracket
                                                                            • fix #15002 : Export/import of uneven tuplets (16th, eighth, eighth, 16th)
                                                                            • fix #15033 : Handle tuplet property "number"
                                                                            • support parentheses attribute for accidentals (preferred as of MusicXML 1.1)
                                                                            • import export volume and pan for each instrument
                                                                            • minimal support of page relative text on first page in import and export
                                                                            • fix #14590 : import errors 23a-Tuplets.xml
                                                                            • fix #14451 : import errors 02a-Rests-Durations.xml
                                                                            • fix #15325 : Notes are interpreted as rests, wrong lengths, strange results
                                                                            • don't import tempo 0 as tempo text

                                                                            Miscellaneous

                                                                            • fix #6649 : Transposition when creating a score from a template
                                                                            • fix: Offset for offtime not saved
                                                                            • changes to tuplet handling to allow reading of corrupted files (#13350 )

                                                                            Plugin Framework

                                                                            • fix #13301 : add score.close() to plugin framework
                                                                            • add score.version and score.fileVersion
                                                                            • add ability to test for no current score

                                                                            Release notes for MuseScore 1.1

                                                                            MuseScore 1.1 was released July 27, 2011.

                                                                            MuseScore 1.1 is a bug fix release. The focus of this release was stability by reducing bugs, only a very limited set of new features were added. Several new translations were added.

                                                                            New Features

                                                                            • MuseScore Connect
                                                                            • add sol notehead, alternative brevist notehead group, new symbols for old notation
                                                                            • fix #4526 : Adding ties to chords
                                                                            • MuseJazz font includes triangle, circle with a slash, and other symbols for chords
                                                                            • MuseJazz font includes complete ASCII character set for text
                                                                            • New "MuseJazz" style to use MuseJazz for all text elements
                                                                            • New "Jazz Lead Sheet" template and style
                                                                            • New chord description (XML) files to switch between popular styles of chord symbols
                                                                            • Space / Shift-Space in chordname entry allows chords to be placed on beats with no notes
                                                                            • Tab / Shift-Tab in chordname entry skips to the next / previous measure
                                                                            • "Acoustic Bass" (pizz. default) added to instrument list

                                                                            Bug fixes

                                                                            Import/export

                                                                            • fix printing of images (fix #10140 : Save as PDF with several images causes crash)
                                                                            • fix #11245 : MusicXML doesn't save Tempo Text if there's no name
                                                                            • fix crash on capella import with timesig 0
                                                                            • import part name from MusicXML
                                                                            • Add support for notehead color in MusicXML export and import
                                                                            • Add shape notehead support in MusicXML export and import
                                                                            • add MusicXML testfile for noteheads
                                                                            • import & export harmony even if not on chord/rest in MusicXML
                                                                            • fix #10849 : musicxml exports lyrics only with notes in voice 1.
                                                                              note: file attached to http://musescore.org/en/node/10168 not handled yet
                                                                            • fix crash on WAV export in fluid
                                                                            • fix #9919 : error on open/read musicxml was not handled
                                                                            • fix #9842 : Tempo value not exported in Lilypond
                                                                            • fix #9830 : Percussion sounds not exported correctly in MusicXML

                                                                            Playback

                                                                            • reduce default reverb gain from 0.5 to 0.2
                                                                            • fix #11164 : Synth control status on startup and audio export
                                                                            • fix #5142 : Notes do not release together in Swing or Shuffle mode
                                                                            • fix playback start position when repeat in the score
                                                                            • fallback to default soundfont if can't load the preferences one

                                                                            Usability and interface

                                                                            • open MuseScore maximize on very first startup
                                                                            • fix entry of underline character in lyrics entry mode
                                                                              (for german keyboard press Strg+Umsch+"-", for english Ctrl+"_")
                                                                            • better handling of Tab key in text element
                                                                            • fix #11246 : change default number of measures and pickup measure timesig
                                                                            • Restore ability to delete instrument name in place
                                                                            • Right click on instrument name for staff properties
                                                                            • new chordstyle is apply now immediatly
                                                                            • remove "what's this" in toolbar and help menu
                                                                            • remove delete button in symboldialog, fix system flag
                                                                            • fix #10935 : fix Soundfont path //
                                                                            • fix #10934 : double error message on opening a 2.0 score
                                                                            • add shortcut for navigating between score tab

                                                                            Plugins

                                                                            • add timesig object in plugin framework
                                                                            • add undo support for scnote pitch and tuning
                                                                            • add : chord.small, chord.noStem, rest.small, note.velocity, score.keysig, score.timesig
                                                                            • set notehead shape from plugin framework
                                                                            • more page format option accessible via plugins

                                                                            Build

                                                                            • fix #10915 : Rename WRC to WRC.BAT in CMakeList.txt

                                                                            Miscellaneous

                                                                            • fix #11267 : Shift + drag tuplet, delete, undo cause crash
                                                                            • fix #10585 : Accidental offset in small staves corrupted by saving and reloading (patch by Miwarre)
                                                                            • fix #10313 : Align settings in Edit Text Style dlg box not stored (patch by Miwarre)
                                                                            • fix rest position for 1 and 3 staff lines
                                                                            • don't play midi note according to preferences (http://musescore.org/en/node/10024)
                                                                            • measure number no more selectable to avoid crash on undo
                                                                            • barline at start of system not selectable to avoid crash on undo
                                                                            • can't create empty part anymore
                                                                            • fix #10564 : Selecting voice before enabling Note Entry and entering notes causes crash
                                                                            • fix #9107 : Pasting multiple multi-voice notes causes crash
                                                                            • fix #9805 : Second Voice can end up broken
                                                                            • fix #9307 : Nested tuplets causes crash
                                                                            • fix crash reported in #10674 comment 2
                                                                            • fix #1722 : Continue last session tries to open discarded score
                                                                            • fix #9338 : chordname scrolls offscreen
                                                                            • fix #10660 : Continue last session & play panel enabled
                                                                            • fix #5900 : Courtesy accidentals lost in transposition
                                                                            • fix #9332 : Unable to create slash-headed notes on drum staff
                                                                            • fix #10165 : Measure num. every n shows number (every n) + 1
                                                                            • fix #9342 : repeat entry doesn't scroll display
                                                                            • fix #10048 : Opening Page Settings causes crash
                                                                            • fix #10370 : Shortcuts cannot be cleared, implement "reset to defaults" in preferences-shortcuts dialog
                                                                            • fix #10335 : importCharsetList does not appear
                                                                            • fix #10264 : Select a flag and enter a note causes crash
                                                                            • fix #7814 : error with single-line-staff percussion notation
                                                                            • don't print blue frame around selected image
                                                                            • fix #7944 : Instrument limit (again)
                                                                            • fix #9996 : Chord navigation does not work on multistaff
                                                                            • fix #9883 : Insert vertical frame between two parts of the same line (volta, cresc) causes crash
                                                                            • fix #9852 : Measure number hidden by horizontal frame
                                                                            • fix #9792 : Clef not displayed after changing clefs in previous measures
                                                                            • fix #9790 : Pasting notes featuring key signature change and lyrics corrupts following bar
                                                                            • fix crash when inserting vertical frame (http://musescore.org/en/node/9765)

                                                                            Translation

                                                                            • New languages: Faeroese, Slovak, Lithuanian, Croatian, Belarusian, Vietnamese, Esperanto, Persian
                                                                            • All existing languages are updated from http://translate.musescore.org

                                                                            Release notes for MuseScore 1.0

                                                                            MuseScore 1.0 was released February 4, 2011.

                                                                            MuseScore 1.0 builds further on the foundation of MuseScore 0.9.6 and the 3 bug fix releases released since June 2010. The focus of this release was stability by reducing bugs, only a very limited set of new features were added. Several new translations were added.

                                                                            Important information for people upgrading

                                                                            • The keyboard shortcut for rests during note entry changed from Space to 0 (Zero). In MuseScore 1.0 Space now starts playback similar to most other media software. If you prefer the old shortcuts you can change them as explained in the handbook (see keyboard shortcuts )
                                                                            • Changing instrument names in front of staves involves an extra step. In previous versions you could double click on the instrument name and edit it directly. Unfortunately this method sometimes caused crashes or corruption and is disabled for MuseScore 1.0. However you can still edit the instrument names. Right-click on an empty part of a measure for the staff you want to rename and choose "Staff Properties..." from the context menu. In the Staff Properties dialog you can change the "Long instrument name" which appears on the first system or the "Short instrument name" which appears on subsequent systems.

                                                                            New features

                                                                            • Ability to hide courtesy key signature and canceling naturals. See #8357 .
                                                                            • Ability to choose first page number. See #8356 .
                                                                            • Bagpipe Music Writer import and bagpipe sound support. See #8355 .
                                                                            • Ability to change velocity and on/off offsets for a group of selected notes

                                                                            MuseScore.com

                                                                            • New workflow for Share scores online
                                                                            • Ability to sign out
                                                                            • Option to automatically sign out on exit

                                                                            MusicXML

                                                                            • improve MusicXML import of clefs
                                                                            • fix #8498 : musicxml import/export: print-object="no" not handled for key signature
                                                                            • fix #8435 : musicxml import: print-object="no" ignored on rest
                                                                            • fix #8474 : MusicXML import: Audiveris ".0" not handled in alter and in backup and forward duration
                                                                            • fix #8428 : musicxml import: voices mixed up
                                                                            • fix #4858 : Courtesy accidentals do not import/export in MusicXML anymore
                                                                            • fix #8400 : musicxml export: stem on whole note in triplet
                                                                            • fix #8546 : MusicXML import: dynamics in notations element are ignored

                                                                            Usability and interface

                                                                            • fix #8503 : Space for play/pause and 0 (Zero) for rest input
                                                                            • add SVG icons for note entry toolbar
                                                                            • change toolbar icon default size
                                                                            • fix default "Save as" and "Save copy" directory
                                                                            • display palettes on first start
                                                                            • Adding panning to templates
                                                                            • enable time signature deletion in timesig palette
                                                                            • fixed vocal range for bartione and bass (instruments.xml)
                                                                            • fix #6345 : First time users confuse demo score for demo software
                                                                            • fix: Local Handbook disabled when no file is open

                                                                            Audio

                                                                            • Adding panning to templates
                                                                            • fix #7857 : Tics in generated wave files

                                                                            Mac specific

                                                                            • fix #6547 : File association on Mac. Add bww, cap, sgu, mgu, mid, ove, md, and MusicXML.

                                                                            Bug fixes

                                                                            • fix #9040 : Dragging note horizontally removes accidental permanently
                                                                            • fix #8974 : Rest entry shortcut does not work in Voice 2
                                                                            • fix #9002 : Reset Position doesn't affect tuplet bracket
                                                                            • fix #4975 : Parts should have multi-measure rests by default
                                                                            • fix #8865 : Crash when changing instrument on drumstaff
                                                                            • fix #8842 : bracketed accidentals not saved)
                                                                            • fix #8727 : write accidentals with parentheses
                                                                            • fix #8763 : Tuplet number not spatium dependent
                                                                            • fix #8735 : Beat corruption in copy paste of partial measure
                                                                            • fix #8750 : Crashes with system containing only vertical box
                                                                            • fix #6736 : Preferences Menu disabled in non english. Avoid merging of menus.
                                                                            • fix #8719 : Pickup measure messes up Lilypond export
                                                                            • fix #3092 : Cannot see 16th note (and below) ledger lines
                                                                            • fix #6317 : Ledger lines not long enough for whole notes
                                                                            • fix #8613 : MuseScore doesn't ask to restore session if you open from file
                                                                            • fix #8612 : Cannot paste to measure with a grace note before beat 1
                                                                            • fix #7303 : Collision between rest and accidentals
                                                                            • fix #6599 : Command line option to change config/settings directory
                                                                            • fix #6362 : Tempo text position not saved for part > 1
                                                                            • fix #6347 : Multiple grace notes do not copy correctly
                                                                            • fix #7764 : crashes when open ove file
                                                                            • fix #8372 : Fix to end-start-repeat bar line width
                                                                            • fix #8369 : Delete one instrument removes slurs from others
                                                                            • fix #8358 : new score: create one measure more when pickup measure selected
                                                                            • fix #8347 : tie in note entry does not work for voice > 1 after a barline
                                                                            • fix #8308 : Creating triplet in grace note leads to time corruption
                                                                            • fix #6536 : Position of stemslash in grace note chord
                                                                            • fix #7415 : Stems too short for 32nd and 64th notes
                                                                            • fix #8273 : Unecessary courtesy clef remains when clef is changed
                                                                            • fix #8194 : Edit instruments mess up instrument name
                                                                            • fix #8184 : Creating parts with cross staff barlines crash
                                                                            • fix #8161 : Missing lyrics in MIDI import
                                                                            • fix #8018 : Lilypond: Quote marks in lyrics need to be escaped
                                                                            • fix #7892 : Exchange voices adds extra rests
                                                                            • fix #7944 : Buffer overflow with a lot of instruments
                                                                            • fix #7017 : Chord names does not support "H" name as chord
                                                                            • fix #7249 : Notehead should be on top of the staff lines
                                                                            • fix #7311 : Dragging tied notes and removing tie gives weird result
                                                                            • fix #7882 : Transposing a score shouldn't transpose a drum staff
                                                                            • fix #6320 : Add œ in F2 text palette
                                                                            • fix #7881 : Exchange voices does not work on last measure
                                                                            • fix #7832 : Extra spaces cause lyric pasting to repeat words
                                                                            • fix #7734 : Pasting lyrics with spaces is not working
                                                                            • fix #6451 : score jump to current position when record MIDI in Note Input Mode
                                                                            • fix #7614 : menu item crash when continuing session with no scores
                                                                            • Better voltas + multimeasure rest layout
                                                                            • fix default fingering font
                                                                            • fix #7665 : Change instrument, undo does not undo sound
                                                                            • fix #7624 : pressing space bar when slur is selected crashes program
                                                                            • fix #7562 : Cursor in text remains in print or PDF
                                                                            • fix #7530 : Hairpin starting on the first note is lost on reload
                                                                            • fix #7514 : Moving instrument deletes tuplets
                                                                            • fix #7520 : Undo reorder instruments does not work as expected
                                                                            • fix #7519 : Moving instrument causes crash
                                                                            • fix #7740 : drag and delete + undo causes crash
                                                                            • fix #7315 : limit values in time signature wizard to 6 bit (1-63)
                                                                            • fix #6649 : Transposition when creating a score from a template

                                                                            Translation

                                                                            • New languages: Afrikaans, Asturian, Basque, Korean, Slovenian,
                                                                            • All existing languages are updated from http://translate.musescore.org

                                                                            Credits

                                                                            Programming

                                                                            • Werner Schweer: Project lead, main developer
                                                                            • Nicolas Froment (lasconic): Windows and Mac OS builds, bug fixes
                                                                            • Toby Smithe: Debian and Ubuntu builds
                                                                            • Olav Gundersen: LilyPond export developer
                                                                            • Leon Vinken: MusicXML import-export developer, BWW import
                                                                            • Rui Fan: Ove import
                                                                            • Maurizio M. Gavioli (Miwarre): new features patches
                                                                            • Friedemann Becker: bug fixes

                                                                            Localization

                                                                            • Afrikaans
                                                                              • djboer
                                                                            • Arabic
                                                                              • Hosam Adeeb Nashed
                                                                            • Asturian
                                                                              • Arcipiecu
                                                                            • Basque
                                                                              • lgerenu
                                                                              • amenudo
                                                                            • Catalan
                                                                              • Carles Clavero
                                                                            • Chinese, Traditional
                                                                              • hishine
                                                                              • aeolus
                                                                              • Curtis Huang
                                                                              • yushengc
                                                                              • vixensjlin
                                                                              • Edward Liao
                                                                              • 陳科旭
                                                                              • yanganto
                                                                              • kagami3421
                                                                              • millieyun
                                                                            • Chinese, Traditional (Taiwan)
                                                                              • benice
                                                                              • yingdat
                                                                              • aeolus
                                                                              • nwhat
                                                                            • Chinese, Simplified
                                                                              • Rui Fan
                                                                              • smithtao
                                                                              • weyllor
                                                                              • oldherl
                                                                              • 李百平
                                                                              • punbit
                                                                              • LianZhang
                                                                              • hishine
                                                                            • Czech
                                                                              • pfri
                                                                              • mkucera66
                                                                              • Peregrinus
                                                                            • Danish
                                                                              • Morten Poulsen
                                                                              • Stig Wolff
                                                                            • Dutch
                                                                              • Jaap Plaisier
                                                                              • Thomas Bonte
                                                                              • toeter
                                                                              • Richard Pasveer
                                                                              • Legov
                                                                              • mouk
                                                                              • Antiklontermiddel
                                                                            • English, US
                                                                              • Raymond May Jr.
                                                                              • ceegers
                                                                            • Finnish
                                                                              • Heino Keränen
                                                                              • hjunes
                                                                            • French
                                                                              • Jean-Louis Waltener
                                                                              • Nicolas Froment (lasconic)
                                                                              • ritmus
                                                                              • utopie
                                                                              • Billard Sirakawa
                                                                              • Tchoun
                                                                              • Robert Leleu
                                                                            • Galician
                                                                              • Xosé
                                                                            • German
                                                                              • Werner Schweer
                                                                              • derhannes
                                                                              • fnbecker
                                                                              • Jojo-Schmitz
                                                                              • pianopleasure
                                                                              • sheksel
                                                                              • chrisch
                                                                            • Greek
                                                                              • Panagiotis Vlangopoulos, Assistant Professor of the Music Department of the Ionian University
                                                                              • Ioannis Toulis, Assistant Professor of the Music Department of the Ionian University
                                                                              • Petros Andriotis, Adjunct Teacher of the Music Department of the Ionian University
                                                                              • Niki Stavrati, Master Degree Student of the Music Department of the Ionian University
                                                                              • Loukas Ksanthos
                                                                            • Hindi
                                                                              • Shashi Sharma
                                                                            • Hungarian
                                                                              • molnarm
                                                                              • drikanb
                                                                              • thSoft
                                                                            • Indonesian
                                                                              • agatorex
                                                                              • gilang.pratama
                                                                              • tedibudiwan
                                                                            • Italian
                                                                              • Angelo Contardi
                                                                              • Antonio Marchionne
                                                                              • Daniele Bravi
                                                                            • Japanese
                                                                              • Neco
                                                                              • kiki
                                                                              • kimikazu
                                                                              • kojikoji
                                                                            • Korean
                                                                              • JongHo Kim
                                                                            • Norwegian
                                                                              • Dag Henning Sørbø
                                                                              • Per Holje
                                                                            • Polish
                                                                              • Grzegorz Pruchniakowski
                                                                            • Portuguese, Brazilian
                                                                              • israel_zeu
                                                                              • Vítor Dassie
                                                                              • marlonpimentel
                                                                            • Portuguese
                                                                              • José Luciano Batista Gomes
                                                                              • elchano
                                                                              • tiago
                                                                              • marlonpimentel
                                                                              • rmatosinhos
                                                                              • ariconstancio
                                                                              • ganglia
                                                                            • Romanian
                                                                              • Claudius Tiberiu Iacob
                                                                            • Russian
                                                                              • Alexandre Prokoudine
                                                                              • kostiagol
                                                                            • Slovenian
                                                                              • ThePianoGuy
                                                                            • Spanish
                                                                              • Carlos Sanchiavedraz
                                                                              • Juan Díaz Porras (alkayata)
                                                                              • Pascual Marchante Lande (Mitocondria)
                                                                              • MrTrebleClef
                                                                              • chiqui5256
                                                                              • pup
                                                                              • Axel
                                                                            • Swedish
                                                                              • Magnus Johansson
                                                                              • Stefan Falt
                                                                              • mbockert
                                                                              • dalahast
                                                                            • Thai
                                                                              • punbit
                                                                            • Turkish
                                                                              • Halil Kirazli
                                                                            • Ukrainian
                                                                              • Serhij Dubyk

                                                                            Other

                                                                            • David Bolton: Handbook
                                                                            • Thomas Bonte: Website
                                                                            • Katie Wardrobe: Video tutorials
                                                                            • Tim Brechbill: SoundFont
                                                                            • Han-Wen Nienhuys, Jan Nieuwenhuizen & others: Emmentaler font
                                                                            • Raùl Posac: MuseScore logo
                                                                            • Zachary Chione: Splash screen design

                                                                            Release notes for MuseScore 0.9.6.x

                                                                            Release announcment for MuseScore 0.9.6 (the release notes seem to have gotten lost)

                                                                            Release notes for MuseScore 0.9.6.3

                                                                              This page has been translated into 简体中文 .

                                                                              MuseScore 0.9.6.3 was released September 21, 2010.

                                                                              Overview

                                                                              MuseScore 0.9.6.3 is a bug-fix release that corrects more than a dozen problems, mostly critical. There are no new features in 0.9.6.3 compared to 0.9.6. Below is a full list of the corrections.

                                                                              Bug fixes

                                                                              • fix #6775: Seg. fault by double clicking any element twice
                                                                              • fix #7233: Transpose by diminished second doesn't work (0.9.6 branch regression)
                                                                              • fix #7232: D.S. after coda sign freezes playback
                                                                              • fix #7167: Time signature change causes triplets to corrupt score
                                                                              • fix #7211: Copy/Paste notes over rest of diff. durations in staves
                                                                              • fix #7142: Crescendo & delete measures problems
                                                                              • fix #7197: MuseScore fails to open MSCZ files with capitals
                                                                              • fix #6932: Changing notehead of a breve crash
                                                                              • fix #7077: Applying double-note tremolo to dotted notes fails and alter measure duration
                                                                              • fix #6937: Measure Properties should be modal dialog
                                                                              • fix #6888: When exchanging voice, voice 1 is removed
                                                                              • fix get keysig from plugin when concert pitch mode is set
                                                                              • fix #6735: C# for AltoSax in default soundfont is silent
                                                                              • add access to DPI and notehead, note boundingbox and note position from plugin framework
                                                                              • fix #7150: Changing soundfont does not work for audio export

                                                                              Documentation

                                                                              • New handbook for Danish

                                                                              Translation

                                                                              • All languages are updated from http://translate.musescore.org

                                                                              MuseScore 0.9.6.3 发布说明

                                                                                (译自 Release notes for MuseScore 0.9.6.3)


                                                                                MuseScore 0.9.6.3 发布于 2010 年 09 月 21 日。

                                                                                概览

                                                                                MuseScore 0.9.6.3 是个纠正超过一打问题——大多是严重的——的修复隐错发布。0.9.6.3 中没有相比于 0.9.6 的新特性。下列是完整的勘误列表。

                                                                                修复隐错

                                                                                • 修复 #6775: Seg. fault by double clicking any element twice 双击任何元素两次引发的段故障
                                                                                • 修复 #7233: Transpose by diminished second doesn't work (0.9.6 branch regression) 移调减二度不好使(0.9.6 分支回归)
                                                                                • 修复 #7232: D.S. after coda sign freezes playback 在尾声(Coda)后转到 S 记号(D.S.)冻结回放
                                                                                • 修复 #7167: Time signature change causes triplets to corrupt score 更换拍号导致三连音会中断总谱
                                                                                • 修复 #7211: Copy/Paste notes over rest of diff. durations in staves 将音符复制/粘贴到线谱中不同时值的休止符
                                                                                • 修复 #7142: Crescendo & delete measures problems 渐强和删除小节的问题
                                                                                • 修复 #7197: MuseScore fails to open MSCZ files with capitals MuseScore 打开扩展名为大写的 *.MSCZ 文件失败
                                                                                • 修复 #6932: Changing notehead of a breve crash 更改短(breve)符头造成崩溃
                                                                                • 修复 #7077: Applying double-note tremolo to dotted notes fails and alter measure duration 将双音符震音应用于附点音符失败并改变小节时值
                                                                                • 修复 #6937: Measure Properties should be modal dialog 小节属性 宜为模态对话框
                                                                                • 修复 #6888: When exchanging voice, voice 1 is removed 当交换声部之时,会移除声部 1
                                                                                • 修复当设置音乐会音高模式之时从插件获取的调号
                                                                                • 修复 #6735: C# for AltoSax in default soundfont is silent 默认声音字型中中音萨克斯的升 C 静音
                                                                                • 添加了从插件框架中对每英寸点数(DPI)和符头、音符边界框和音符位置的访问
                                                                                • 修复 #7150: Changing soundfont does not work for audio export 更换声音字型对音频输出不好使

                                                                                文档

                                                                                • 丹麦语的新手册

                                                                                笔译

                                                                                • 所有语言从 http://translate.musescore.org 更新

                                                                                Release notes for MuseScore 0.9.6.2

                                                                                  MuseScore 0.9.6.2 was released August 16, 2010.

                                                                                  Overview

                                                                                  MuseScore 0.9.6.2 is a bugfix release including 12 bugfixes mainly critical ones. There are no new features in 0.9.6.2 compared to 0.9.6. You can read the details of the bugfixes below.

                                                                                  Critical

                                                                                  • fix #6597: Close/reload crash on XP
                                                                                  • fix #6658: Naturals in every key signature on mac PPC -- spontaneous restatements of key signatures mid-system
                                                                                  • fix #6508: Crash removing instrument with volta (0.9.6 regression)
                                                                                  • fix #6706: Crash when inserting slurs from palette while editing text
                                                                                  • fix #6740: Autosave works only the first time
                                                                                  • fix #6479: Crash when closing score during playback (0.9.6.1 regression)
                                                                                  • fix #6624: Crash when deleting a tuplet from a MusicXML import
                                                                                  • fix #5667: Oversized note symbols in bold text (Linux)
                                                                                  • fix #6620: Crash on changing dynamics font size/failure to restore session

                                                                                  Plugin framework

                                                                                  • fix cursor move on repeatmeasure in plugin framework
                                                                                  • fix instrument name containing flats for plugin framework

                                                                                  UI

                                                                                  • fix #6505: Mixer is not refreshed when scores are switched
                                                                                  • fix mouse wheel handling for mixer elements
                                                                                  • fix repeat command (⎈ Ctrl + R) for staves > 1

                                                                                  Translation

                                                                                  • New language: Asturian
                                                                                  • All other languages are updated from http://translate.musescore.org

                                                                                  MuseScore 0.9.6.2 发布说明

                                                                                    (译自 Release notes for MuseScore 0.9.6.2)


                                                                                    MuseScore 0.9.6.2 发布于 2010 年 08 月 16 日。

                                                                                    概览

                                                                                    MuseScore 0.9.6.2 是个包括 12 项主要是严重项的隐错修复的修复隐错的发布。相比于 0.9.6,0.9.6.2 中没有新特性。您能阅读下列隐错修复详情。

                                                                                    严重

                                                                                    • 修复 #6597: Close/reload crash on XP 在 Windows XP® 上关闭/重新加载会崩溃
                                                                                    • 修复 #6658: Naturals in every key signature on mac PPC -- spontaneous restatements of key signatures mid-system
                                                                                    • 修复 #6508: Crash removing instrument with volta (0.9.6 regression) 移除带有跳房子的乐器(0.9.6 回归)时崩溃
                                                                                    • 修复 #6706: Crash when inserting slurs from palette while editing text 在编辑文本期间当从符号面板插入分句线之时崩溃
                                                                                    • 修复 #6740: Autosave works only the first time 自动保存仅在第一次好使
                                                                                    • 修复 #6479: Crash when closing score during playback (0.9.6.1 regression) 在回放期间关闭总谱之时崩溃(0.9.6.1 回归)
                                                                                    • 修复 #6624: Crash when deleting a tuplet from a MusicXML import 当删除来自音乐可扩展置标语言导入的连音之时崩溃
                                                                                    • 修复 #5667: Oversized note symbols in bold text (Linux) 粗体文本音符符号尺寸过大(Linux®)
                                                                                    • 修复 #6620: Crash on changing dynamics font size/failure to restore session 更换力度字型尺寸时崩溃/恢复会话失败

                                                                                    插件框架

                                                                                    • 修复插件框架中光标在重复小节上的移动
                                                                                    • 为插件修复包含降记号的乐器名称

                                                                                    用户界面

                                                                                    • 修复 #6505: Mixer is not refreshed when scores are switched 切换总谱之时不刷新混音器
                                                                                    • 为混音器元素修复对鼠标滚轮的处理
                                                                                    • 为线谱数 > 1 的情形修复重复命令(⎈ 控制 + R)

                                                                                    Translation

                                                                                    • 新语言:阿斯图里亚斯语
                                                                                    • 所有其他语言从 http://translate.musescore.org 更新

                                                                                    Release notes for MuseScore 0.9.6.1

                                                                                    MuseScore 0.9.6.1 was released July 12, 2010.

                                                                                    MuseScore 0.9.6.1 is mainly a bugfix release including almost 40 bugfixes. There are no new features in 0.9.6.1 compared to 0.9.6. You can read the details of the bugfixes below.

                                                                                    Crashes and critical

                                                                                    • fix #6425 : Crash loading score with breath mark selected
                                                                                    • fix #6388 : Crash on importing a MusicXML file (beam problem)
                                                                                    • fix #6072 : Crash when adding note to wrong percussion staff
                                                                                    • fix #6335 : Crash on creating triplet on a chord
                                                                                    • fix #6289 : crash on loading score where a key signature is selected
                                                                                    • fix #6275 : Remove the last inserted vertical frame make musecore hangs
                                                                                    • fix #6138 : crash on creating new score (after some steps)
                                                                                    • fix #6076 : crash on play a new score after exiting a playing score
                                                                                    • fix #6049 : 0.9.5 file with breve or longa cannot be opened with MuseScore 0.9.6

                                                                                    Memory management

                                                                                    • fix #6164 : free memory after removing score

                                                                                    Sound

                                                                                    • fix #5162 : Artefacts in "Strings CLP" sound
                                                                                    • fix #6093 : Dynamics are not played for Soprano in TimGM6mb.sf2
                                                                                    • fix #6253 : High CPU usage when idle if reverb is on

                                                                                    Import & export

                                                                                    • fix #6318 : MusicXML export of syllabic is broken
                                                                                    • fix #5949 : MIDI import gives unexpectedly silent notes
                                                                                    • fix #6163 : Export MIDI in wrong preference tab
                                                                                    • fix #6283 : R key does not work as expected in drum staff

                                                                                    Transpose

                                                                                    • fix #6254 : Concert pitch lossy transposition
                                                                                    • fix #6264 : Chordnames not transposed on copy-paste or concert pitch
                                                                                    • fix #5923 : Transpose chordnames does not preserve pitch spelling

                                                                                    Handbook

                                                                                    • fix #6060 : Help > Local Handbook doesn't work on windows
                                                                                    • fix #6060 : Change pdf filenames for composed locale handbook

                                                                                    Miscellaneous fixes

                                                                                    • fix dragging from palette of measure repeat symbol
                                                                                    • remove incompatible "temperament tuning" plugin
                                                                                    • fix adding notes on voice > 0 from plugin framework
                                                                                    • fix ove import charset preferences init
                                                                                    • fix layout of fermata if in staff > 1
                                                                                    • fix #6245 : Underscores in Lyrics are not copied badly/not at all
                                                                                    • fix #5906 : Tick value shown in Object Inspector limited to 999999
                                                                                    • fix #5903 : Duration arithmentic with longa and brevis
                                                                                    • fix #6195 : breve rest & longa rest are inversed
                                                                                    • fix #6079 : problem in multimeasure rests with 2 staves score
                                                                                    • fix #6172 : note properties does not keep notehead group
                                                                                    • fix #6144 : Notes (and other signs) in small staves are smaller than they should
                                                                                    • fix #6134 : Fingering text offset does not save units and alignment
                                                                                    • fix #6114 : SVG graphics disappear after reload
                                                                                    • fix #6453 : File containing a horizontal frame directly before a bar with a line break cannot be opened
                                                                                    • no empty tab if user tries to open a file with unknown extension
                                                                                    • page numbers are no longer editable in the score since formatting does not stick
                                                                                    • refuse to open incompatible score files (file version number > current version number); this adds new translatable strings

                                                                                    Translation

                                                                                    • updated translations
                                                                                    • new translations : Basque, Hebrew, Slovenian