Can someone help me make a few plugins?

• Jul 30, 2018 - 02:29

I would like to make a few MuseScore plugins. I have already done some preliminary searches on how to make MuseScore plugins, and the reading has been helpful, but I don't think I am going to be able to learn how to make plugins by myself given what I found.

The stuff I want to do doesn't seem hard, but I don't know that it would be in popular demand either. In any case, I was wondering if there might be a guru, who might be open to helping me along?

Thanks.


Comments

In reply to by jeetee

Thanks, JeeTee. :)

I know my request was generally stated, but then there were a few reasons I had for initially stating it in general terms.

The main reason is, I have a couple of ideas, and - even if some don't work - I would not want the one's that could work to end up dismissed. The other reason is, it seems like the whole question of how to build plugins or features is itself a wide open opportunity for educational development, so - even if a short "How to Build Plugins for MuseScore" video series on YouTube were the project in question - such basic educational videos would at least allow people to get their feet wet. And, even if ALL my ideas were shot down, then it would probably seem due to a lack of understanding on what IS feasible with respect to how plugins are made. So such videos would help either put the questions to rest myself or actually pursue something that would work.

I wouldn't mind documenting what I learn in terms of videos, but, right now, let's turn to some of the ideas I have.

Most of my ideas are kind of like Photoshop's action scripts, i.e. they are macros that build upon existing commands already in MuseScore, which are intended to basically condense a task that may currently require several steps to manually complete into one simple command. For instance, like MuseScore, a lot of text editors have the ability to keep several tabs open at once, so you can work on multiple documents. It would be nice to have (a) plugin(s) that could:

1 - Create a duplicate document of the one currently open. It's already possible to do this right now, but it requires a few steps. You currently have to either: a.) save selection of the current file, type in a name for the saved copy, return to the file->open, navigate to the directory, select the file and open it; or, b.) assuming it is already a saved file, go to file->open, and then reload it. You could also c.) start from scratch, but starting from scratch would seem to require a lot more work than either of the above. It would seem easier if a plugin could be built where one would simply select a passage, open a right-click menu, and then have two new options on the right click menu: (aa.) send selection to new score, or (bb.) create a new (blank or duplicate) score from the current one. All those steps could then be run through in a macro-like way, and a new, yet unsaved score (with a suggested file name and marked as unsaved) would open beside it in just one step.

2 - One could generate a lot of open and unsaved scores that way, so then I would have also have a "Save All" feature to keep from having to revisit each document and the File->Save routine over and over again. Again, "Save All" functionality is common amongst text editors, so, while it might require more work than a plugin, it would still seem possible. And, if possible, then simply a matter of learning, since MuseScore is open source.

I have lots of ideas like these. Some more advanced than others.

In another example, I use Fruity Loops 20 as my DAW, and I wish there was a MuseScore VST or VST-like plugin I could use in my DAW. The reason is, I work primarily in midi, not audio. And, yet, Fruity Loops has an awesome Piano Roll permissive of recording midi straight from the keyboard as played, which I have not seen as possible in MuseScore. Fruity Loops' Piano Roll will, however, export midi. So I end up having to go back and forth between the DAW and the notation editor. It works, but it drives me nuts. It would be easier - if possible - to simply "put MuseScore in Fruity Loops" (as a VST or plugin of some sort), so I could do my notation editing right inside the DAW, when necessary. I've run this idea by the Fruity Loops folks in their forums, but Image-Line (being a for-profit company) hasn't been responsive to the idea at all.

In any case, even if none of this, or any of my other (as of yet unmentioned) ideas worked, the educational component on how to do this kind of development still seems to require attention.

I'd be happy simply learning to learn.

Thank you again for responding. :)

Wm

In reply to by myMelodies

it seems like the whole question of how to build plugins or features is itself a wide open opportunity for educational development, so - even if a short "How to Build Plugins for MuseScore" video series on YouTube were the project in question - such basic educational videos would at least allow people to get their feet wet

The reason it doesn't exist (yet?) is simply the time required from someone (such as yourself) to create such a resource. Moreover, the plugin framework provided in v2.x is more of an overgrown experiment with a lot of missing elements/functions in it, rather than a sturdy and stable API. In comparison, there has been some preliminary work done in the 3.0 development version by a contributor, but the framework there (even the underlying C++ one) is still very much unstable and in flux.

Now moving on to your ideas and some of the current possibilities within the scripting framework:
1. AFAIK it is not possible to inject custom context menus on elements (so no influencing right-click behavior on a score). What you can do however, is have a plugin for a specific task/macro and assign it a keyboard shortcut using the Plugin Manager.

  1. All actions that MuseScore allows you to assign a shortcut to (see the list at https://github.com/musescore/MuseScore/blob/v2.3.2/mscore/shortcut.cpp#… ) can be called using the lesser-known ´cmd("cmdname")´ instruction.

  2. Integrating MuseScore into other software moves you way past plugin scripting and very likely into compiling your own other-program-compatible-plugin version of it. You'll need a good understanding of C++ and documentation/examples of how to write plugins for that other software package. You'll probably also need a bit of time and lots of trial and error ;)

In reply to by jeetee

Re: The github link...

Are all those folks listed on that GitHub page the main MuseScore developers then?

Based upon what you say, I'm going to have to figure out some way of orientating myself to navigate the existing literature, design specs, developments and etc...

As for the "holes" in the framework, if possible, why not make a list (if one doesn't already exist), so one could see what can be done to fill in the existing gaps, what work needs to be done to enable greater functionality, what progress is being made and so on...?

Does this help things?

The problem with documentation (especially in open source work) usually seems to be one of accessibility and user-friendliness, especially at lower-levels of development. This can stifle progress. But imagine if we opened a portal whereby people (like me) could become oriented on how to participate...

If someone (or some people) will help guide me, then I will work to provide sound guidance and orientation for others... Flatten the learning curve a bit, and the results I think should speak for themselves... yes? :)

In reply to by myMelodies

Are all those folks listed on that GitHub page the main MuseScore developers then?
No, most are just normal or one-time contributors. From that committer list wschweer is the main developer, lasconic one of the two others with the power to merge in contributions.

For design specs (musescore doesn't really have any at all, nor a real roadmap) see https://musescore.org/en/handbook/developers-handbook which does include a link to (the start of) a page about Plugins for 3.0

There is also a brief code vision and guideline writedown at https://github.com/musescore/MuseScore/blob/master/mscore3.txt

The way I found out holes (or bugs) exist is by trying to write a plugin and hitting a wall. As for finding out which functions exist; open up MuseScore, then open up the Plugin Creator and in there open the included Help, which is a function reference of the exposed functions.

You can also have a look at the outstanding PRs and issues that are tagged plugin in the issue tracker: https://musescore.org/en/project/issues/musescore?text=&status=All&prio…)

In reply to by jeetee

Thanks again, JeeTee.

I wanted to post to let you know I haven't abandoned this idea here. I'm still reviewing the materials you have mentioned, as well as contemplating where to begin. Trying to comprehend a simple beginning for a large body of knowledge is probably going to require an"Aha!" moment.

A lot of the material in this thread already put the problem in perspective, but the actual work is a somewhat different matter. A best beginning is probably a walk-through video/narrative on how to setup the simplest, most bare-bones plugin imaginable - something like a "Hello World!" plugin, which basically would do nothing more than simply demonstrate connective functionality to someone who may have a deeper idea.

The problem with such a bare-bones plugin would probably be finding one that is - from a programming standpoint - robust and significant enough that people could and would be inspired to build other stuff upon it.

I still like a lot of the ideas I mentioned before. Maybe - if it were possible - a "MacroMuse" plugin, like Photoshop's action scripts, might allow for recording scripted sequences of highly used, actionable commands for later repeated reuse. I'm still trying to figure out how it would wok in terms of the existing infrastructure, though.

In reply to by myMelodies

Also, while I am still trying to get oriented, when MuseScore executes a command - it obviously knows enough to use the command to make the desired change. It seems possible the commands themselves could then be (if they aren't already) sent to a command log, which could form the basis for a macro-maker plugin. Is any such a "command-sequence-log" file currently generated somewhere I do not yet see?

In any case, some of the initial ideas I proposed in this thread should then be doable, as well as any other combination of redundant commands any other end-user finds themselves using in their workflow, provided the executed commands print in sequence to the log. The "command-sequence-log" could then be saved as it's own file. The plugin itself might simply just initiate the recording, save the log file, and reopen it, and then reread/interpret the executable snippets. That seems how a macro works, if I have it right.

Do you still have an unanswered question? Please log in first to post your question.