Improving sound in MuseScore

MuseScore 16/08/2015: Synchronizing MIDI Actions #4

This weekend I implemented a new dialog for adding MIDI Events. Now users can add their own MIDI Events, even non-standard.
Now MIDI Actions work with multi-channel instruments, such as violin (channels: normal/pizzicato/tremolo), trumpet (normal/mute), etc.
Also I fixed a lot of small bugs.
Although the implementation of MIDI Actions still has some bugs, it is already usable and almost finished.

MuseScore 13/08/2015: Synchronizing MIDI Actions #3

I finished implementation of the algorithm for synchronizing internal MIDI Actions in MuseScore with MIDI Actions in the opened score. Now it's possible to create a new MIDI Action in one score and use it in other scores. Also it's possible to receive a score from another computer and use MIDI Actions from it in other scores.

MuseScore 12/08/2015: Synchronizing MIDI Actions #2

I started to implement synchronization algorithm. I also implemented several features for MIDI Action dialog window (e.g. filtering actions) and fixed some bugs.

For now I add new MIDI Actions by editing midi-actions.xml or score file. I will have to create another dialog window for user-friendly adding MIDI event.

MuseScore 11/08/2015: Synchronizing MIDI Actions

As I wrote to Bart Massey before, I was in a study trip, so I was busy for about two weeks.

Now I am ready to finish "MIDI Actions" feature. I came up with an algorithm for synchronizing the internal MIDI Actions in MuseScore and MIDI Actions in the opened score. We need this synchronization to have a bunch of MIDI Actions available to use in all scores. If you open a new score, new MIDI Actions will be added to MuseScore and you can use them later.

MuseScore 25/07/2015: MIDI Actions #4

I didn't write code on Friday, so I had to compensate on Saturday.
I started to implement MIDI Actions the way I described it before.
Now we have 2 places to store MIDI Actions:

  • In Score class (msc* file) - MIDI Actions of score.
  • In MuseScore class (reading from midi-actions.xml) - MIDI Actions available for all scores.

Using midi-actions.xml file for storing global actions solves the problem I described in the previous post: now we will be able to share user-defined events across several scores.
I implemented saving selected MIDI Actions and rendering them to midi, so playback works. Also I wrote several predefined actions, so now MIDI Actions in MuseScore work almost like before, but with different UI and architecture.

MuseScore 23/07/2015: MIDI Actions #3

Now I understand how the current implementation of MIDI Actions work.

Every Instrument has a list of MIDI Actions, every MIDI Action is a list of MIDI events (defined in instruments.xml). Also every Instrument has a set of Channels (for example, normal/pizzicato/tremolo), every Channel also has a list of MIDI Actions.
Thus, we have two sets of MIDI Actions: the first one related to every Channel of Instrument, and the second one is channel-dependent.
To add MIDI Action to a certain position of the Score we use StaffText and SystemText elements, they just store names of selected MIDI Actions.

As I mentioned before, MIDI Action is a list of MIDI events, so it is possible to have duplicates of MIDI events in different places.

I wanted to implement it this way: store a list of used MIDI events in a Score. This list is accessible for every Instrument and Instrument's Channel. StaffText/SystemText will just store pointers/links/names of MIDI events. Notice that I'm going to store MIDI events in the Score, not sets of events (Actions). Since users will be able to add arbitrary MIDI events, there is no need to create sets of predefined events for them: they could construct any sequence of MIDI events by themselves.

The disadvantage derives from storing MIDI events in Score. Since Score will contain predefined and user-defined MIDI events, how can we share user-defined events across several scores?
Before this could be easily done by editing instruments.xml file - changes were affecting all new instruments in all scores.

MuseScore 21/07/2015: MIDI Actions #2

I started to explore the existing code of MIDI Actions. The way of storing actions' data is very different from what I wanted to implement.
This code is found in different classes and files, so I need some time to understand how it works together.

MuseScore 20/07/2015: MIDI Actions

Today I started to work on MIDI Actions feature. It will help users to send arbitrary MIDI events to internal/external synthesizer from any part of the score.

There will be a set of predefined actions to choose and also an option to create own MIDI events. I'm going to store predefined actions in MuseScore (instruments.xml?) and user-defined actions in a score file.

Since MIDI Actions will affect the whole MIDI channel, it is not possible to assign a MIDI Action to an Instrument's Voice. Users will assign MIDI Actions to an Instrument's Channel (normal/pizzicato/tremolo, not to be confused with MIDI channel).

Here is a sketch of the MIDI Action tab with some example data:

I don't know if users really need to have additional column with hex values of MIDI event, but it will help me during the development.

MuseScore 16/07/2015: NOP day

Today I spend a lot of time trying to reinstall and configure Plasma 5. It looks cool, but it's still freezes and hangs, so tomorrow I'm going to perform a fresh install of Kubuntu 14.04.

MuseScore 15/07/2015: "Assigning MIDI channels" feature published!

I cleaned up the code a bit and finally published the "Assigning MIDI channels to instruments" feature.
I created a pull request to MuseScore repository and now it's ready for testing.
New opportunities unlocked:

  • Assign each instrument to a different MIDI port and connect MuseScore to external synthesizers, effects processor and VST instruments via JACK with minimum additional software (JACK + MuseScore + QJackCtl/any patchbay).
  • Export MIDI mapping to MusicXML and MIDI files to make futher editing/processing simpler.
  • Better control of MuseScore output for research/related projects (MuseScoreSSMN, etc).

This branch needs some user testing, and I hope it will be merged in the next release.

Syndicate content