New feature to test: MIDI out
MuseScore 2.1 and previous versions can send MIDI messages to external devices or synthesizers using JACK. Jack offers many great professional features, but unfortunately it’s hard to install on Windows and macOS, as it’s primarily a Linux software.
For many years, we didn’t want MuseScore to have an easier way to send MIDI events to the outside world, for two main reasons.
- MuseScore is first and foremost a music notation software. Its purpose is to easily create beautiful sheet music. Playback is nice, but the core team wants to focus on the notation.
- We were (and still are) worried that if we offer minimal support for MIDI out, we would get many feature requests to improve it, sometimes in ways that are not possible, or that we prefer to not spend our time on, or that would make MuseScore complex to use for users who don’t care about MIDI.
Eric Fontaine was not happy with this state of affairs and really wanted to make MuseScore usable on a low end device where the internal synth takes a lot of CPU cycles and MIDI out would be more performant. So he checked the various available libraries (RtMidi, PortMidi etc…) and decided to use PortMidi, which MuseScore already uses for MIDI in. After > 100 comments and some code, we now have MIDI out in master! You can test with a nightly build.
How to enable MIDI out
MIDI out is not enabled by default. You need to go to Preferences / I/O and choose an option for MIDI output. If you use an external device, it’s probably the name of your device. If you use a software synth, you might need virtual MIDI cables. Note that MuseScore will send MIDI events out to the selected device but it will also send the events to its own built-in synthesizer. If you don’t want to hear the built-in synth, you will need to either lower the volume, or remove the SoundFont in View / Synthesizer.
Note about output buffer latency: if this is set to 0, then messages are sent as soon as possible after MuseScore sends them to PortMidi, and might sound before the playback cursor. You can set this greater than 0 to try to find a value that will cause the notes to sound at the same time of the playback cursor.
What you can do currently with this feature?
- Play a simple score through an external MIDI device (keyboard, synthesizer, etc…)
- Play a simple score through a virtual instrument in standalone mode
What you can’t do with this feature?
- Play an overly complex score out of the box. MuseScore is not a sequencer and its basic MIDI support is limited to the default 16 channels (also, no automation, no custom sysex etc…)
- Send a MIDI song position event
- Send a MIDI clock signal
- Synchronize different MIDI devices or software together
This feature might evolve depending on your feedback. However, we will make sure that we do not overload the software with dozens of options dedicated to MIDI out specifically.