Implementation of full JACK support

Updated 1 year ago

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