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

Demo: Piano-Roll chop, stamp, strum, bulldozer and mode switcher #6140

Draft
wants to merge 13 commits into
base: master
Choose a base branch
from

Conversation

allejok96
Copy link
Contributor

This is only meant as a showcase. Everything will have to be redone when #6063 get merged. So don't look at the code right now. It's horrible. Let's focus the discussion on the UX aspect.

video.mp4

Motivation

There are many cool features in Pianoroll that is hidden behind modifier keys. And sometimes the order of pressing down keys matter. Like shift-press-move vs press-shift-move and shift-ctrl-resize vs ctrl-shift-resize. This draft suggests splitting out all these features into dedicated edit modes.

Quick edit mode button

bild

  • All extra edit modes are gathered in a ComboButton.
  • Last selected action is the one displayed by the button.
  • Scrolling the button changes mode.
  • Mid-click in the editor is a shortcut to whatever last used on this button.
  • Right click always takes us back to draw mode.

Knife improvements

  • If cutting on a selection, the cut spans over all notes.
  • When holding shift, the cut is repeated to the end of the note/selection.

Stamp tool

  • Copies selected notes to the position of mouse click
  • Shift-click in draw mode does this also.

Strum tool

Related #2380

  • Clicking on a stack of notes selects the whole stack
  • Dragging a note in the stack create an arp.
  • The dragged note is quantized, but not the notes in between.
  • Dragging on a selection scales it proportionally (like shift-resize) but without altering note length.

Bulldozer

Related #1643

  • When moving notes, all notes starting from that position and right are moved.
  • Resizing a note: all notes ending on the same tick are resized. Posterior notes are moved.
  • Resizing a selection: resize proportionally (like shift-resize). Posterior notes are moved.
  • Resizing while holding shift: scale everything within start and end mark proportionally. Posterior notes are moved.

I can't seem to find a good logic when it comes to resizing in bulldozer mode...

Stuff removed from Draw mode

In favor of the dedicated edit modes.

  • mousepress-shift-move to quick resize.
  • shift-click to create an arp of selected chord.
  • shift-ctrl-resize to resize and move posterior notes.

@Veratil
Copy link
Contributor

Veratil commented Aug 26, 2021

I dig it! (bulldozer-esque pun? 😄)

@Spekular
Copy link
Member

Don't have time to deep dive but I'm a bit concerned about

Right click always takes us back to draw mode.

Personally I think it would be good if right click was available for context menus when possible, so dedicating it as an "reset mode" shortcut would be a conflict. Of course RMB currently deletes notes so there's already a conflict, but that could be solved by e.g. allowing right click on an empty space to launch a menu (requiring a note to be clicked to enter erase mode). Does this PR create additional conflicts with RMB as a context menu?

Another concern is that (without having used it, to be fair) it seems clunky to go to the toolbar every time you want to access these tools. While they save time, there's an initial investment of moving the mouse up and back that makes them feel less convenient and immediate than they could be.

I think you could kill two birds with one stone if the modes and tools were available with a right click. Then you could e.g.

  • Ctrl+Drag select > RMB > Fill
  • RMB > Mode > Knife
  • Ctrl+Drag select > RMB > Duplicate (new)
  • Cut/paste selection
  • Export selection

In combination with this I would probably collapse erase and select mode into the mode selection dropdown. They seem just as niche to me as some of the other modes introduced here, because I'm not sure who would click a box select icon instead of ctrl dragging, or click erase mode instead of RMB-ing or select + deleting.

@allejok96
Copy link
Contributor Author

Good suggestion, although a delicate topic. Related #1569

Does this PR create additional conflicts with RMB as a context menu?

Previously Knife used RMB to exit. The new thing here is that Select and Erase does that too. And the new modes of course. RMB in draw mode is still erase.

requiring a note to be clicked to enter erase mode

RMB on empty space and dragging over notes should also erase IMO.

@allejok96
Copy link
Contributor Author

My reptile brain wants erase on right mouse button, no matter how hard I try to relearn. Better not change that (unless it becomes a user configurable option).

there's an initial investment of moving the mouse up and back that makes them feel less convenient and immediate than they could be

Here's some more experimentation: ctrl right click to open a context menu. This is where all your actions be put. I just stuffed some stuff there at the moment. Menu content could perhaps depend on if user clicked on a note vs empty space.

And to switch between all them lovely new tools, use ctrl right drag to access this NEW FANCY HEXAGONAL GESTURE THINGY 🎊

hexmenu.mp4

@allejok96
Copy link
Contributor Author

Strum tool is currently half broken btw

@allejok96 allejok96 changed the title More Pianoroll edit modes (demo/UX discussion) Demo: Piano-Roll chop, stamp, strum, bulldozer and mode switcher Sep 24, 2021
@spechtstatt
Copy link
Contributor

Hi @allejok96 :

Really like the ideas because I am desperately missing such kind of humanization tools - not only strumming but also the randomization of the velocity and note length because it takes really some (unnecessary) time to this manually.

(please correct me if it is already possible and I am not aware of it :-))

But I think the strumming would need some more settings. Somehow like in FL Studio where you can e.g. preserve the ends - as described here:

https://www.image-line.com/fl-studio-learning/fl-studio-online-manual/html/pianoroll_strum.htm

Maybe adding some kind of "humanization panel" which is docked somewhere (left side?) in the piano roll and contains the controls?

@allejok96
Copy link
Contributor Author

@spechtstatt thanks for the feedback. #1165 is what you want. Also it sounds like you want strum to be applied automatically to all chords? This strum tool is manual use only, and in hindsight I think that might be useless. You could achieve something strummy right now with the arpeggio, but it's also severely broken.

I've been running lmms with this patch for a while and this is my evaluation so far:

  • bulldozer: must have for melody writing, should be developed further
  • knife chop: time saver when you need it
  • clone: just old man's shift-drag at the moment, needs something more
  • strum: never used it
  • fancy gesture thingy: works alright but no big hit. Having to press ctrl when doing the gesture is just messy on the brain. In that case I'd rather just use the keyboard to switch between modes. Have to think of something better...

@spechtstatt
Copy link
Contributor

No, I would just keep the approach with applying the operations for the selected notes only because the strumming may not be applied for all chords at once but varied along the progression - e.g. like it is often done in lofi.

I am not sure if I understand the approaches of @musikBear correctly, but it seems to me that they are more track related (like the arpeggio) and it sounds to me that the chord selection seems to contain some "magic"?

I think it would be much more flexible to just have a relatively simple editing helper which is just applied to the selected notes. This allows also for an easy mixing of manual and "automatic" editing - like humanize the notes (velocity/start/length/padding and so on) and adapt it afterwards.

(But as I said: maybe my interpretation is incorrect)

@allejok96
Copy link
Contributor Author

For reference, the strumming feature created by musikBear: https://www.youtube.com/watch?v=OlBtU0JYvyY

@spechtstatt
Copy link
Contributor

Thank you - this is very impressive.

If I am interpreting this correctly it is based on the quantization setting. But I am not sure if this limitation is necessary. Maybe this can be done in a more free way by using a kind of knob. Like switching into a specific mode with a button and controlling what is applied with a knob. This could basically be done for all the humanization stuff.

The only difficulty is the initial value of this knob. But maybe this could be overcome in an easy way by resetting the knob value if the selection changes and also when the mode is selected/changed?

@spechtstatt
Copy link
Contributor

spechtstatt commented Jan 15, 2022

And I also think that all the nice editing features are sadly too hidden for the users. We could use an additional toolbar as many graphic programs do. Something like this:

image

The bar would contain some of the existing functionality (maybe slightly extended to be more complete - to be honest I didn't really understand what "min length is last" and "max length as last" is doing so I left it out for now) and also the new humanization stuff grouped at the right with the humanizer knob.

Every humanizer button would be a disjunctive state for the knob. I imagine that pressing one of the modes would allow for a flexible and smooth increase or decrease of the selected humanization effect.

image

@allejok96
Copy link
Contributor Author

allejok96 commented Jan 15, 2022

all the nice editing features are sadly too hidden for the users

I wouldn't say that things in a drop down menu are hidden from users. They menu is in plain sight and if you find it too hard to click twice you can learn the key combo instead, which may be even faster than moving to the toolbar and clicking a button. But that's just my opinion. We could do some form of tear-off menu toolbar thing like most word processors do, and then we'd have the best of both worlds... (very nice concept art btw!)

I didn't really understand what "min length is last" and "max length as last" is doing

"Last" as in "Note length: Last note". Yeah I know, it's terrible, and it's my fault. It was a hack mainly for the Fill tool, because it may create undesirably long notes. Click the note you want as reference and then click the min/max button. The whole feature is illogical and should probably be reworked.

I imagine that pressing one of the modes would allow for a flexible and smooth increase or decrease of the selected humanization effect.

Edit: let's move the humanization discussion to #1165 as this PR is more about click-and-drag driven editing tools.

@spechtstatt
Copy link
Contributor

(Damn - I have really to take care what I criticize :-))

@musikBear
Copy link

I am not sure if I understand the approaches of @musikBear correctly, but it seems to me that they are more track related (like the arpeggio) and it sounds to me that the chord selection seems to contain some "magic"?

Mine is note-stack dependent, and only for selected notes.
But am i to understand this as both strumming and humanisation now is done, and my code is not necessary at all?

@allejok96
Copy link
Contributor Author

There is no humanization code in this PR... The images by @spechtstatt are just prototypes right? @musikBear what happened to your humanization code?

@spechtstatt
Copy link
Contributor

Yes - its (unfortunately) always easier to just make an UI concept art than to finally do the really hard work and implement it :-)

@musikBear
Copy link

musikBear commented Jan 19, 2022

There is no humanization code in this PR... The images by @spechtstatt are just prototypes right? @musikBear what happened to your humanization code?

That is also in that PR.
The issue was that i could not get my code out of the VirtualBox with Linux-mint where i made it, without destroying my repo. I fought that github-crap for month and made several messed up PRs and failed every time. The result was that my PR showed 1000'th of edits where non was.
All the code for strumming humanizing and a little thing the helps to place notes precisely is made and works as shown in the video.
I 'just' need to get it flawless into gitHub, without destroying my home-repo.. 'Just'🙄
But in essence, there is no reason to code this. It is done already
If shove comes to push, i can create a second new VirtualBox, and only use that for gitHub, then my home-directory should be untouched in the process
I am actually simultaneously attempting to build in VS2022 in windows!
That is very much a WIP..
Latest next week, i will make a PR and ask for review, unless... 🥴

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

Successfully merging this pull request may close these issues.

5 participants