[GSoC 2015] Improving MIDI channels, MIDI Actions

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[GSoC 2015] Improving MIDI channels, MIDI Actions

igevorse
Hello!

*** Intro ***

My name is Maxim Grishin and I am a participant of Google Summer of Code 2015.
Unfortunately, MuseScore was not accepted for the 2015 edition of GSoC. This summer I participate under Portland State University, but my project is about MuseScore.

Last summer while participating GSoC 2014 I implemented full JACK support in MuseScore: JACK MIDI Out, JACK Transport, JACK Timebase master/slave, etc. I also started to implement other features beyond GSoC proposal: some of them were finished and merged, but some were not.

Last summer there were several suggestions to improve MIDI subsystem in MuseScore on the mailing lists [0]. First of all, it is manual assigning MIDI channels to Staves/Instruments, and also manual adding MIDI events (volume change, program change, etc) with the help of StaffText/SystemText.

I started to work [1] on this several times, and I had to rewrite the code several times. Unfortunately, I had a lack of free time and a high load at university, so I still haven't finished it.

Due to the latest changes in MuseScore I have to write code from scratch again.

*** GSoC 2015 ***

This summer I will implement these features:
1. Assigning MIDI port/channel to instruments.
With this feature it will be easier to manage JACK connections: we'll get rid of using qMidiRoute and will be able to connect to external VST(i)'s directly. Also we will have more control over MIDI channels of the internal synth.

2. MIDI Actions: sending arbitrary MIDI events from any part of score.
With this feature we will be able to change parameters/settings of external VST's via MIDI. Also this could be helpful for SSMN project and various applications mentioned last year [0].

Feel free to write questions or wishes about my work, also post your use cases of these new features.
You can track my progress at my blog [2] or find me on IRC #musescore as igevorse.

[0] http://dev-list.musescore.org/Improving-JACK-MIDI-Out-td7578792.html
[1] https://github.com/musescore/MuseScore/pull/1083
[2] http://igevorse.lited.net/
Reply | Threaded
Open this post in threaded view
|

Re: [GSoC 2015] Improving MIDI channels, MIDI Actions

lasconic
Administrator
Welcome back Maxim ! And thank you for the intro.

lasconic

2015-05-07 12:20 GMT+02:00 igevorse <[hidden email]>:
Hello!

*** Intro ***

My name is Maxim Grishin and I am a participant of Google Summer of Code
2015.
Unfortunately, MuseScore was not accepted for the 2015 edition of GSoC. This
summer I participate under Portland State University, but my project is
about MuseScore.

Last summer while participating GSoC 2014 I implemented full JACK support in
MuseScore: JACK MIDI Out, JACK Transport, JACK Timebase master/slave, etc. I
also started to implement other features beyond GSoC proposal: some of them
were finished and merged, but some were not.

Last summer there were several suggestions to improve MIDI subsystem in
MuseScore on the mailing lists [0]. First of all, it is manual assigning
MIDI channels to Staves/Instruments, and also manual adding MIDI events
(volume change, program change, etc) with the help of StaffText/SystemText.

I started to work [1] on this several times, and I had to rewrite the code
several times. Unfortunately, I had a lack of free time and a high load at
university, so I still haven't finished it.

Due to the latest changes in MuseScore I have to write code from scratch
again.

*** GSoC 2015 ***

This summer I will implement these features:
1. Assigning MIDI port/channel to instruments.
With this feature it will be easier to manage JACK connections: we'll get
rid of using qMidiRoute and will be able to connect to external VST(i)'s
directly. Also we will have more control over MIDI channels of the internal
synth.

2. MIDI Actions: sending arbitrary MIDI events from any part of score.
With this feature we will be able to change parameters/settings of external
VST's via MIDI. Also this could be helpful for SSMN project and various
applications mentioned last year [0].

Feel free to write questions or wishes about my work, also post your use
cases of these new features.
You can track my progress at my blog [2] or find me on IRC #musescore as
igevorse.

[0] http://dev-list.musescore.org/Improving-JACK-MIDI-Out-td7578792.html
[1] https://github.com/musescore/MuseScore/pull/1083
[2] http://igevorse.lited.net/



--
View this message in context: http://dev-list.musescore.org/GSoC-2015-Improving-MIDI-channels-MIDI-Actions-tp7579312.html
Sent from the MuseScore Developer mailing list archive at Nabble.com.

------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Mscore-developer mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/mscore-developer


------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Mscore-developer mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/mscore-developer
Reply | Threaded
Open this post in threaded view
|

Re: [GSoC 2015] Improving MIDI channels, MIDI Actions

ChurchOrganist
In reply to this post by igevorse
Good to have you back Maxim.

One thing which would be very dear to my heart is for MuseScore to recognise external MIDI transport messages.

Currently, unless a sequencer is JACK compatible you cannot start MuseScore playback from it - or at least I have not yet found a way of doing so.

If we could get MuseScore to listen for Sequencer Stop/Start messages that would solve the problem. Ideally recognising Song Position Pointer messages would be good too, but that could come later.

Would there be any way you could work this in with the rest of your work on MIDI.
Regards
Michael
Reply | Threaded
Open this post in threaded view
|

Re: [GSoC 2015] Improving MIDI channels, MIDI Actions

Maurizio M. Gavioli
In reply to this post by igevorse
Welcome back Maxim, I'm glad you are able to resume your project!

As you asked for use cases, I have one: driving GrandOrgue with MuseScore.

The case is rather specific -- I understand -- but, given the lack of sound fonts even remotely usable for 'early music', an organ could be a reasonable substitute in many pieces (and for GrandOrgue several historic instruments are available, even for free, which are totally plausible in a great number of cases)

At first sight, MuseScore => GrandOrgue works out of the box. In practice, it is necessary to configure each organ for each piece (simply to match the number of parts in the piece with the number of manuals+pedal in the organ, not to mention stop selection). Whence:

1) The ability to select the MIDI channels for each staff in MuseScore would greatly simplify this and would add a lot of flexibility.

2) The ability to send arbitrary MIDI events from MuseScore would allow to code in the piece the commands to select a specific configuration in the receiving organ and would also allow to change the registration mid-score (which currently can only be done manually while the piece is played back. And, well, yes, this is what a 'real' organist does, but we are speaking of playback here!).
________________________

There is one additional detail which I would like to see implemented, if possible. Imagine a 4-voice piece played on a man+ped organ; we can assume that the 4 voices are normally played on the manual (I believe this is called 'closed score' configuration in English).

Now, it happens frequently that two voices hit the same note, but partially shifted: 1) one voice attacks that note, 2) another joins and then 3) the first changes note while the second keeps it a little longer.

As the two voices are mapped to the same channel, currently, the note off event at 3) shuts down the note, even if the other voice is still singing it. It would be nice if some kind of 'note reference count' could allow to defer the note off event until *all* occurrences of that note are really over.

Thanks for reading and best wishes for your project!!!

Maurizio
Reply | Threaded
Open this post in threaded view
|

Re: [GSoC 2015] Improving MIDI channels, MIDI Actions

igevorse
In reply to this post by ChurchOrganist
Hello. Here is a short list of achievements:
  • I implemented [0] Bend playback.
  • I finished the most of implementation of "Assigning channels to instruments" feature.
  • Listening to MIDI Machine Control, Start/Continue/Stop and Song Position Pointer messages for JACK, ALSA and partially PortMidi.
  • A couple of fixes related to MusicXML import/export.
"Listening to MMC" is not merged, so welcome for testing. For JACK it works better with small buffer size (for example, 64 samples) and "ALSA Raw-MIDI" MIDI Driver.
Ardour sends SysEx Goto/Locate messages, Qtractor sends Song Position Pointer messages, so if you set correct tempo and time signature, the sync with Qtractor will be more accurate. You can clone my mmc [1] branch for testing.

[0] http://igevorse.lited.net/p21.html
[1] https://github.com/Igevorse/MuseScore/tree/mmc
Reply | Threaded
Open this post in threaded view
|

Re: [GSoC 2015] Improving MIDI channels, MIDI Actions

pedroseq
This post was updated on .
Hi Maxim,

First of all, let me say that I'm very glad you could rejoin the MuseScore development team.
Unfortunately, I've been extremely busy for the past three months (still am) and failed to reply the first post of yours from May 7th, so this is a long overdue reply to that first post, regarding your new MIDI implementations in MuseScore.

On this regard, I must say that I read, saw and heard your last blog post, and it's quite impressive what you've accomplished with pitch Bend playback. Would this effect be extensible to glissando playback? If the answer is yes, than that would be fantastic, since it is a rare feature among the available notation softwares with playback capabilities.

Concerning other new features, I've had some ideas that may interest you, namely, the addition of a timeline in Continuous View mode, along with automation tracks (which we already address back in [0]), and the enhancement of MuseScore's SFZ sampler (Zerberus), to allow for certain SFZ format compliant features that could be really useful.

If time permits, I'll try to test your new features, but I can't promise I'll be able to do it rather soon. If, eventually, you were able to compile a generic 64bit binary for a Ubuntu 14.04 based system (I use KX Studio, which derives from Ubuntu 14.04 LTS), for local testing, that would speed up things, since I already have some samplers installed in the system that I could try with your MusesScore version.

Regarding the SSMN parallel project, Emile Ellberger wrote a post, back in March 26th this year [1], saying that they wanted to merge their version with MuseScore 2.0 and they were looking for developers to assist them. I don't know how they are doing right now, but if this is of some interest to you, you could try help them or inform them of your achievements, to see if they're useful for them.

My best regards.

[0] http://dev-list.musescore.org/Improving-JACK-MIDI-Out-td7578792i20.html
[1] http://dev-list.musescore.org/MuseScoreSSMN-SSMN-Spatialization-Symbolic-Music-Notation-call-for-participation-td7579145.html
Reply | Threaded
Open this post in threaded view
|

Re: [GSoC 2015] Improving MIDI channels, MIDI Actions

igevorse
This post has NOT been accepted by the mailing list yet.
Hi pedroseq

what's wrong with glissando playback? I just tested several types of Glissando and I can hear them playing.

It's not easy to implement automation tracks, so I don't think somebody will implement it soon. Nevertheless, I hope we will get the improved "MIDI Actions" feature by the end of the summer (see below). If you have some ideas related to Zerberus, it's definitely better to describe them in MuseScore forums [0] so that more developers could see them.

Bend playback is merged, so you can try MuseScore 2.0.2 or latest linux nightly build [1] to use it. Regarding other features: it's probably not a good idea to send binaries to the mailing list, so please write me a PM with your e-mail.

I think it's too early to write to Emile Ellberger about new features because they're still not merged.


To all:
I have good news about my GSoC participation: I've finished implementation of "Assigning MIDI channels to instruments" [2] feature. Also let me remind you that I've finished Midi Machine Control [3] feature that helps to control MuseScore playback without using JACK Transport.
I created pull requests for these features, so you're welcome for testing!

I will start to work on "MIDI Actions" feature in a few days. It will give us an ability to send arbitrary MIDI messages to sequencers/synthesizers/VSTs. [4]