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:
- JACK MIDI Out support (PR)
This feature gives an ability to send MIDI events to one or several external synthesizers or VST plugins.
- More realistic sound of score.
- Adding realtime midi effects to the sound.
- JACK Transport (reposition) (PR)
We provide current position in frames (samples) to JACK Transport, keep an eye on it and seek if position changed.
- 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.
- JACK Timebase Master (commit)
Being the Timebase Master application could provide bar (measure), beat and tempo information to JACK.
- Sync other applications working with midi to MuseScore, managing tempo.
- More control over JACK Transport (not just seek, but slow down/accelerate).
- 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.
- More control over syncing to another application.
- Adjusting tempo in real time to application / external automation tracks.
- 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.
- No need to restart MuseScore if you want change preferences related to JACK.
- 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.
- You don't need to connect all things again manually.
- 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.
- No need to manually control port number.
- One more step to implementing ALSA MIDI.
- Assigning channels to instruments (not merged) (PR)
With this feature users can assign any midi port and channel to instruments.
- 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).
- 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.
- 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)