musescore / MuseScore

MuseScore is an open source and free music notation software. For support, contribution, bug reports, visit MuseScore.org. Fork and make pull requests!
https://musescore.org
Other
12.1k stars 2.62k forks source link

Ability to change note duration in note input mode #24537

Open wizofaus opened 1 week ago

wizofaus commented 1 week ago

Your idea

After adding a note while in note input mode, I'd like the ability to change its duration without exiting note input mode, e.g. by pressing the left-arrow key first to indicate the just-entered note is selected, then pressing a duration key (1-8) to change its duration.

Problem to be solved

It's pretty easy while entering notes to think "pitch first, duration after", but MuseScore's note input mode doesn't seem to facilitate this at all currently. Press left arrow before pressing the number seems like a reasonably intuitive way to do this given the way duration changes work outside of note input mode, but it doesn't work. It's sort of possible by toggling on "rhythm only" mode (which there's no shortcut key by default, but you can assign one), then changing duration, then switching back to regular "step time" entry (also has no shortcut by default) then pressing the right-arrow key again, but it's fairly clunky.

Prior art

I understand Finale and other notation packages have a mode for specifying pitch first then duration.

Additional context

The obvious "workaround" is to delete the pitch, change the entry duration and re-enter it, but I would say that requires more mental gymnastics (I don't think I've done something "wrong" per se that needs to be deleted, I just want to amend what I just entered - and I have to hit a different key dependent on the actual pitch).

Checklist

scorster commented 1 week ago

While in Note Input you can change the duration of the just-entered note with Shift+q or Shift+w

wizofaus commented 1 week ago

Even more reason to allow changing it to a specific duration via the number keys! Shift+q appears to change a note to 3/4 of its duration and shift+W to 1.5x unless already dotted, then it goes to 2/3 or 4/3 the length respectively. Meaning if the current duration is 1/8 notes and I enter a pitch then realise/decide it should be a whole note I have to press shift+w ~7 times.

cbjeukendrup commented 1 week ago

I like very much how Dorico handles this. Their shortcuts system is very rigid: just pressing keys without modifiers always affects just the UI state (e.g. selected duration, navigation through the score), while pressing ALT+key modifies the selected element, e.g. edit its duration or move it around or length/shorten it. It's of course more than 10 years too late to implement that in MuseScore, but maybe we can partly implement it to support this feature request. ALT+number is already taken though.

Separately from that, it's certainly not inconceivable that we will add a "pitch before rhythm" note input mode. We'll need to spend some thought though about how we would present that in the UI because having just a list with a lot of different modes is perhaps not ideal.

wizofaus commented 1 week ago

But surely Alt+A...G activate menus, at least on Windows - or does Dorico not use A-G to change pitches?

Anyway I'm not suggesting the need for a whole "pitch before rhythm" mode that allows you to put in a bunch of pitches then assign a rhythm to them, though I would think there's a case for the existing "rhythm-only entry mode" working like that (rather than just duplicating the pitch of the last entered note, which appears to be what it does). I also don't know why it's called "rhythm only" as clearly it does allow entering pitches too!

MarcSabatella commented 1 week ago

It’s not necessary to delete the current note - just re-enter it directly on top of the exist one and it is replaced.

Once upon a time I implemented an experimental “apply current note input state” command for MU3 to retroactively apply whatever duration and accidental is selected in the toolbar to the currently selected note. It was dead simple to implement and worked well enough, but no one seemed all that excited by it and it was never merged. It’s still not a bad idea, IMHO. Compared to the suggestion here, it means you don’t need to back up to make it work and thus feels rather more natural to me.

I am also not crazy about having the duration keys do two different things depending on whether you just pressed cursor left or not - that feels like a hack and likely to be a bit error prone.

But instead of keying off use of recent Left, it could make more sense to key off cursor position == current selection, which is basically only true after using cursor keys (otherwise cursor position is always ahead of the selection). And while it could be argued this would seem like a regression to anyone who actually planned to reenter the passage anyhow, if that was the case, it’s mostly harmless to change the selected note duration.

But a modifier to make the duration keys apply retroactively is fine too.

wizofaus commented 1 week ago

I wasn't suggesting the logic should be "did the user just press the left-arrow", but rather, as you say, change the duration of the note where the input cursor is.

worldwideweary commented 1 week ago

Why not, in the above mentioned case of inserting an 1/8 note and realizing you want it to be whole,

  1. Press left
  2. Press [whole] toggle
  3. Invoke [Repeat] command If you get in the habit of doing that, it's super easy and "makes sense". Plus it works for chords or notes. That + the shift+q/w seems to be fairly decent for retroactive rhythm change

changeRh.webm

MarcSabatella commented 1 week ago

That is a super clever two-keystroke workaround for sure, never would have occurred to me. Still not as convenient as the separate shortcut set for retroactive application, or the separate command to retroactively apply the current input state. But of course it has the advantage of being something we can use now :-)