I just managed to clone, compile and run MuseScore on my PC. So I'm ready to start contributing, right?
My initial thought was to tackle something simple: like "Implode".
In looking into Implode, it seems like it's just one of many potential algorithm for combining multiple voices (or staves) into a single voice (or staff). Other versions might be equally valid, neither better nor worse.
I'm wondering what might be the best direction for development. Implode is in Edit / Tools, which seems to be a set of internal "plugins". A useful plugin system should allow for functions in Edit / Tools to be created as plugins. If it were a plugin, then I could just create alternate implementations of Implode and the end-user could decide which ones to use.
My first question is: Is Implode (and the other tools) built-in because the plugin system is not powerful enough to implement it?
If it's not, perhaps that is something I might look at (although I would guess is not a good first project).
If it is, then perhaps I could re-implement the current tools as plugins with the goal of removing the internal versions.
If the plugin system is not powerful enough, another alternative would be to develop an internal plugin solution. This would add the ability for the end-user to select the internal plugins he/she wants to use. The big drawback is that these plugins probably have to become part of the MuseScore build system—they have to be compiled, maintained and updated—so the big advantage of plugins (independent development) is lost.
For Implode, specifically, there is another solution. Perhaps the ability to merge and split voices and staves should be promoted to a major feature. I noticed that elsewhere on the list someone is proposing a piano reduction feature. Another merge tool I would find useful is the ability to combine two single-voice instruments on two staves into a single staff using the "1.", "2." and "a2" notation. Again, this is probably not a good place to start as a new developer.
Or I could just try to improve the current Implode, if people are OK with that. Its main problem, from my point of view, is that it uses voice 1 as a template for the merge. If voice 1 has a lot of empty measures, none of the other selected music will fill this space. I'd like to do a merge that fills empty space with notes from any voice. I'd also like to experiment with a version that would handle different rhythms by using using all four voices in the target staff. The idea is that you would merge to an empty staff. The code would try to graft notes onto existing chords with matching durations. If no existing chord works, then a new voice is created (until you run out of voices, of course).
My hesitation with changing the existing Implode is that I would be changing the way an existing feature works, which might have an implication for existing documentation. Adding an alternate Implode to the Tools menu doesn't seem like a good approach—thus the discussion of plugins.
As the author of the implode tool, I can address some of this:
Implode is internal for several reasons. It was originally a plugin (which I also wrote), but a) the framework was too limited at the time (might be better now?) to do a good job of it, and b) having it only as a plugin means it is ony available to the very few power users who are motivated, willing, and technically able to to search for, download, and install a plugin. Those are the real drawbacks. Also, plugins tend not to be documented the same places and in the same manner as core tools; they won't typically be localized, etc. So it was a big step up in usability to convert implode (and the other tools) from a plugin to a core tool; changing back to a plugin is a big step *backwards*. I'd much rather *more* utilities converted from plugins (and hence available to power users only) to core tools (available to all, with good documentation etc). That goes for things like the courtesy accidental plugins, the half/double time plugins, plugins to create cue notes, etc.
Implode is designed to handle a specific use case, and indeed, it isn't the right tool currently for other use cases some people might imagine it could be useful for (although we did tweak it to be, "less bad" at those other use cases. I'd say if you want to make it useful for other use case, go fo,r either make it a separate "implode voices" plugin or maybe add a dialog box to let user choose optionsl, or maybe there is actually some celver way to make the same algorithm handle the main two uses cases at once.
So if you have a specific idea for how you think an implode tool should work, I'd suggest you discuss it on the Technology Preview or perhaps General forum, see what feedback you get. Offhand, I don't relly understand the part about empty measure - in what real world use case would you be imploding empty measures and expecting them for some reason to become non-empty. So you might want to provide an actual score as an example so we can see what you mean. If it seems generally useful and not something of vaue only in rare exceptional circumstances, then sure, go ahead and try implementing it. If it can be done without breaking the behavior in the existing real world use cases (which tend to not involve empty measures, or in which empty measures are expected to stay empty), then just change the current tool. If it seems similar enough to have the same basic use model but maybe requires an option or two to control the behavior, then consider adding a dialog with some checkboxes or radio buttons. If it's really just two separate tools "implode staves" versus "implode voices", then just change the name of the existing tool and add the new one.
On Fri, Apr 22, 2016 at 10:39 AM freixas <[hidden email]> wrote:
I just managed to clone, compile and run MuseScore on my PC. So I'm ready to
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
Mscore-developer mailing list
I thought I might hear from you...
Sure, I'll start a discussion elsewhere. I can clear up the empty measure confusion. I am not imploding empty measures and expecting content. I am imploding measures in which voice 1 in the top staff is empty and the other voices (or staffs) are not.
I have a wind quintet. I want to merge the flute, oboe and clarinet parts. The flute starts in measure 3. The clarinet has music in measures 1 and 2.
Using multiple staffs:
1) I add an empty staff at the top, select that staff and the flute, oboe and clarinet staves and then select Implode. Nothing changes.
2) I copy the flute part to the empty staff. Select the top four staves and try again. Imploding results in empty measures 1 and 2.
Using multiple voices:
Copy the flute as voice 1 in the empty staff, oboe as voice 2 and clarinet as voice 3. Implode, and measures 1 and 2 are empty. The oboe part is not simply ignored—it is erased.
Anyway, I'll start a discussion and provide screen shots of these use cases as well as samples of what I'd like to happen.
|Free forum by Nabble - Scala forum||Edit this page|