Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase length of selected note by selected duration #3

Open
woodslanding opened this issue Mar 28, 2023 · 4 comments
Open

Increase length of selected note by selected duration #3

woodslanding opened this issue Mar 28, 2023 · 4 comments

Comments

@woodslanding
Copy link

I have always been annoyed that entering music into notation programs does not follow the natural way that music is performed. I am an improviser, but at it's best, we might hope that writing a score, at least in the earliest stages could be like improvising.

A few notes about what that entails:
If improvising any kind of melody (as applies to any mostly monophonic instrument) there is an order to things.

When I start a note, I do not know how long it is. Its length is determined by when I RELEASE it. When I release it, only one of two things happen: I start a new note, or I rest. One thing that does need to happen while I'm holding the note: I need to KEEP TIME. And it is through the process of keeping time that I determine note duration as a musician.

So, if I have a passage that is mostly eighth notes, with some quarter and half notes, and similar types of rests, every eighth note can be represented one of three ways: as a note start, as a rest, or as a continuation of an existing note.

This means that if I had a key command that would increase the length of the most recently entered note by 1/8th note I can type in the passage as a series of 8th notes IN RHYTHM (until such time as there is a triplet or a sixteenth note, of course.) If you are not a drummer or jazz musician, it might not be obvious how intuitive and fast that could be. As someone who is both, I can assure you that conceptualizing a melody as a rhythmic series of the three types of keystroke above is in fact a musical skill many of us have. And this means fairly long stretches of notation could be entered IN REAL TIME, especially if you have a midi keyboard to enter the pitches.

It has taken me a long time to arrive at this (and it took the musescore forum to show me I actually wasn't even the first.) I started out being impossibly annoyed by the necessity to end a note before I begin it, in conventional notation programs. Then I discovered noteflight, which allows you to change the duration of a note after you enter it. Of course you can only change the TYPE of note, and you can dot it using another keycommand, so you can't get a note 5 1/2 beats long that way, nor does the physical act of setting the note length have any musical performance analogue. Once again, although they made a step in the right direction, noteflight is still treating notes as if they have no particular meaning off the page. It concerns itself with the SYMBOLS that need to be created, rather than the ACTIVITY those symbols represent.

The ACTIVITY of playing a whole note tied to a half note tied to an 8th note is PLAYING a note, and HOLDING that note for 6 1/2 beats. In notation, by contrast, you create three notes of different length and connect them together. So notation commands are:
select whole note
input pitch
select half note
input pitch
tie them together
select eighth note
input pitch
tie them together

Whereas my sequence is:
select 8th note
input pitch
Count & 2 & 3 & 4 & 5 & 6 & in eighth notes with the 'increase note length' key.

I leave it to the reader to decide which is closer to the act of performing music. No doubt at all that the first is closer to writing it out.

@lgvr123
Copy link
Owner

lgvr123 commented Mar 29, 2023

So if I rephrase your request in a User story style, this would be:

(1) Feature request:
AS a score editor
I would like to select a note, a base duration (e.g. eighth note) and press consecutively a button (called "the button" in the remaining of this analyse) a variable number of time.
I would like that, when I stop pressing this button, the duration of the selected note is changed to the base duration multiplied by the number of times I pressed the button,
IN ORDER TO enter the note duration on a felt basis (opposed to on an upfront known basis).

This Use story could be further refined as:

(2) Immediate application:
AS a score editor
I would like that, while consecutively pressing the button, if the system detects that I've stopped pressing the button, the computed duration being applied immediately to the selected note, without any extra confirmation or validation step,
IN ORDER TO change the note duration fast.

(3) Undo:
AS a score editor
I would like that the application of a a computed duration to a note be reversible by one undo action
IN ORDER TO revert wrong changes

(4) Cancellation:
AS a score editor
I would like that, while consecutively pressing the button, if the system detects that either the selection in the score changed or I pressed another button, the process be stopped and the note duration not be changed.
IN ORDER TO cancel the process without having to undo it.

(5) Cross-measure
AS a score editor
I would like that if the computed duration is bigger than the measure duration, tied notes are added in the next measures
IN ORDER TO have always the right duration of the note

(6) Augmentation of the note's current duration
AS a score editor
I would like that, if the computed duration is bigger than the current note duration, the notes and rests currently following that note (so before application of the computed duration) be replaced by the augmented note tied notes
IN ORDER TO keep the general relation between notes and measures untouched.

E.g. if the for following notes are eighth notes: A-B-C-D, pressing 3 times the "eighth" button on the note A will result in having A-A-A-D, B and C being replaced by the augmentation of A.

(6) Diminution of the note's current duration
AS a score editor
I would like that, if the computed duration is smaller than the current note duration, the difference in duration between the former duration and the computed duration be filled by rests.
IN ORDER TO keep the general relation between notes and measures untouched.


Is this correct ? If not please adapt it.

I couldn't deduce from your initial post what to do with tuplets.


As a first reflection, I would say that your request is OUT OF SCOPE of my Duration Editor plugin, which is working in a completely opposite way for (4), (5) and (6).

Nevertheless, what you trying to achieve (if the User Stories I deduced from your initial post are correct) is not complicated. I could extract from the Duration Editor a canvas for you to make your own plugin.

@woodslanding
Copy link
Author

woodslanding commented Mar 29, 2023

First off, thank you for responding to my request! Also thank you for schooling me on user story, and sorry for responding with a vernacular version of the term.

Secondly, if it is true as I heard somebody say, that scripts do not work with the current version of MS, it definitely gives me pause. I would not want to develop, and certainly not ask anyone to develop for me, something that is not usable with the current version of the software. If indeed the scripting API is changed/changing for V4, I can wait. That said, I already am extremely grateful for your work in helping me tease out the particulars of my idea, whether or not it can be put into action any time soon.

After going through your story with a fine toothed comb, scratching my head, and writing out a lot of my confusion in responses, I have figured out where your story diverges from mine. So here is a new user story. I foresaw one particular of the approach differently than you did, and while both are valid means of implementing the idea, I think mine is substantially easier to implement, and also gives the user more helpful feedback. (1) below functions differently, and that changes most of the rest of the story.

(1) Feature request:
AS a score editor
I would like to select a note, a base duration (e.g. eighth note) and press a button (called "the button" in the remaining of this analyse).
I would like that, when I release this button, the duration of the selected note is incremented by the base duration, and the note remains selected, so that it can be incremented again by the same amount using the same button,
IN ORDER TO enter the note duration on a felt basis (opposed to on an upfront known basis), while simultaneously getting immediate visual confirmation of the note length increase and any side-effects thereof.

(2) Tying notes
AS a score editor
I would like that new duration be correctly represented as notation by creating and tying to new notes as needed, even across multiple bar lines, and that the most recently created of these notes remain selected, in conformance with (1) above,
IN ORDER TO always have the right duration of the note

Sidenote: (one thing I like about Dorico is that a series of tied notes is treated as a single note. There is a specific command to untie notes, should you want to treat them independently for some reason.)

(3) Tuplets
AS a score editor
I would like that, if some kind of tuplet is selected for the base duration, the button would increase the length of the note by the base duration in the same way. If the base duration is an 8th note triplet, and the selected note is also an eighth note triplet (which it would typically, but not always, be) the note would be increased by the length of an 8th note triplet, giving a quarter note in an eighth note triplet bracket. If I press the button again, the selected note will change to a quarter note. Press again, and it will become a quarter note tied to an eighth note triplet, and the second of these notes will be selected.

(5) Replacing existing notes
I accept that as I am entering notes via this method as in the program in general, I risk removing existing notes, so
AS a score editor
I would like that if the increased note-length results in the selected note occupying the position of an existing note, the existing note will be removed.

THAT SAID:
Since I view this primarily as a means of entering music, and far less as a means of editing music, if this feature existed in a way that it moved all notes beyond the selected note back in time by the base duration, whether on the selected track or on all tracks, I would still gladly use it. I would probably enter new information at the end of the song, and paste it in afterwards, but in a situation where I write a B section and go back later to create an A section, it would be exactly what I'd want anyway, and spare me adding a bunch of measures to the beginning of the piece.

Generally, I find that MSs method of overwriting existing material when editing is fine by me. The exception I have found so far is in tuplets, where removing a tuplet bracket increases the length of existing notes, thereby risking overwriting existing material. I find this maddening, but it could easily be fixed by decreasing the length of notes when a tuplet is removed, rather than increasing them. I will write an FR for that, if one doesn't already exist.

Even if (as honestly seems like it might be the best idea in the circumstances) you do nothing more to pursue this, thank you so much for introducing me to user stories, and for taking the time to help me figure out the particulars of this idea.

@lgvr123
Copy link
Owner

lgvr123 commented Mar 29, 2023

You learned the User Story concept very quickly ;-)
This is true that developing plugin for MuseScore 4 is pointless and painful ! (Incomplete support of the API, no code editor, ...).
50% of my plugin don't work in MS4. That's the reason I (and many other users) keep using MS3.6 and not MS4.

About your user stories, one question : (1) "I would like that, when I release this button, the duration of the selected note is incremented by the base duration," : you mean : one click on the button leads to one duration incrementation, two clicks lead to 2 incrementation. Opposed to what I understood which was to wait until the user stopped clicking the button to increase the note duration. Correct ?

@woodslanding
Copy link
Author

Well, I was a GUI developer for a number of years. But the term was not yet in use back then ;)

To the user story, that's the exact difference. By changing the duration immediately, you eliminate the need for some sort of cancellation method while allowing the user to see the process happening...

If the story as I've written it seems complete to you, I will submit it as an FR on the website, as the best solution would be to include it in the program itself. We'll see if it gains any traction there. (EDIT: oops, I neglected to press the post button on this comment yesterday, so as you read this the FR is already up....)

I will say that if you felt motivated, and it was very easy to implement, and you incorporated it in your plugin, I would probably install 3.5 in order to use it. I would just start projects with 3.5, and once I moved past the input stage I could then open the project in v4. In the best case scenario, that's still a short term solution. I do hope it might be easy to include in the actual software.

Thanks so much!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants