Menu

#1605 Playback loop is hard to use with large compositions

None
closed
usability (3)
1
2022-12-27
2021-09-06
ell1e
No

Rosegarden is great, but 2-3 seemingly minor UI things really waste a lot of my time and nerves when I try to work on larger projects. This is one of them:

Sorry if I missed something, but by default Rosegarden seems to just forward into long silence after playing a track, with no obvious simple way to change it. This seems like a huge anti-feature to me, if I keep the playback going I want to keep the song going to continue previewing and editing it. (Otherwise I would have pressed stop...?) Sadly, setting a loop range over a longer song is very tedious because when zoomed out to cover the entirety of it, it is almost impossible to set it accurately to the proper start/end of first and last measure of the song. Also, it is a huge time waster to readjust it every time I added another measure and want to preview the entirety of it. Even worse, I need to redo this manually every time I selected a short section temporarily for looping and I want to go back to the entirety of the song.

As a result, I think the current loop behavior is almost unusable, and I'm cursing every time I need to touch it.

This is my proposed fix: I think a reasonable behavior would be instead to break up the IMHO nonsensical link of the transport loop toggle to the loop range. I should be able to toggle looping without a loop range, and it should NOT reset me to the old possibly partial loop range. Instead, if no loop range is set it should loop back immediately after the last non-empty item to the first measure. Setting a loop range may optionally still enable the transport loop button, or not, I have no strong feelings on this, but clearing the range should definitely not unset it. This way I could set partial loop ranges as I wanted, and when clearing out go back to looping the entire song without wasting an entire minute trying to fiddle the giant whole song loop range back into place. (This is also how REAPER, a commercial DAW, handles this by the way - "do a loop button" and "loop range slider" UI decoupled.)

Tested with Rosegarden 20.12.

Related

Bugs: #1051

Discussion

1 2 3 4 > >> (Page 1 of 4)
  • Ted Felix

    Ted Felix - 2021-09-12
    • labels: --> usability
    • summary: Quality of life/Usability: default playback loop is annoying time-waster with no workaround(?) --> Playback loop is hard to use with large compositions
     
  • Philip Leishman

    Philip Leishman - 2021-10-03

    Hmm... Never used looping much but I have to agree it seems a bit difficult to use in the way you describe it here.
    I had noticed that playback continues after the last segment has ended which I also thought rather annoying.
    It is possible to set the range for the whole song using the Start/End loop or range buttons but it seems to me that it would be sensible to be able to clear the range and then allow looping of the entire song.
    I can look into this.

     
  • Philip Leishman

    Philip Leishman - 2021-10-03
    • assigned_to: Philip Leishman
     
  • Philip Leishman

    Philip Leishman - 2021-10-09

    So my approach is to allow looping of the whole song if no loop is set. If a loop is set it may be reset with a new menu item under tools->transport.
    Also the song now stops playing at the end of the last segment instead of running on into silence.
    Please merge and test.
    Comments welcome

     
  • Ted Felix

    Ted Felix - 2021-10-16

    UPDATE: The following is mostly wrong as I assumed right-click in the ruler cleared the loop as the tooltop says. It doesn't. It merely disables the loop. Notes embedded below. Really, though, I recommend just not reading this at all.

    Looks good. So to get OP's requested behavior the use case looks like this:

    • Enable loop (in transport) to loop the entire composition.
    • Right-click and drag in the ruler to set a small loop.
    • Right-click in the ruler to clear the small loop. [Incorrect, this does not clear.]
    • Enable loop (in transport) to loop the entire composition.
    • repeat

    That's really straightforward.

    The problem I noticed is that the "full composition" loop gets stuck. [Only because right-clicking doesn't clear.] E.g. if your composition is 5 bars and you do the full composition loop, it will work fine. But if you then add another Segment that takes the composition to 6 bars, the full composition loop is still only 5 bars. You have to use the new "Reset loop memory" menu item to reset this. [Working as designed.] Right-clicking in the ruler doesn't work. [Right-clicking in the ruler doesn't clear the loop. It disables it.] To make this easier and to better address OP's complaint, we should recompute the "full composition" loop each time it is enabled (it will need to be right-click cleared first, of course). Then there is no need for the new menu item. [This is impossible as right-clicking in the ruler is disable, not clear.] Here's the use case I'm thinking of:

    • Drop a Segment that stretches to bar 5.
    • Clear any existing loop by right-clicking in the ruler. [Right-click does not clear.]
    • Enable the loop via the transport.
    • The loop should go from 1 - 5.
    • Add a new Segment that stretches to bar 6.
    • Right-click in the ruler to clear the loop. [Right-click does not clear.]
    • Enable the loop via the transport.
    • The loop should go from 1 - 6.

    So each time we enable a loop when there is no loop, we get a loop that covers all the Segments at that moment. No need for a "Reset loop memory" menu item. [The Reset loop memory option is needed since right-click doesn't clear the memory.]

     

    Last edit: Ted Felix 2021-10-16
  • Ted Felix

    Ted Felix - 2021-10-16

    I was misinterpreting the meaning of the right-click in the ruler in the previous post. Turns out instead of clearing as the tooltip says, it merely disables. This is why the new menu item is needed. Ok, I need to rethink this. I will edit the previous post to avoid future readers being misled. Sorry about that...

     
  • Ted Felix

    Ted Felix - 2021-10-16

    So, I guess the first most obvious comment is related to the existing ruler behavior and tooltip. A right-click should toggle between enable and disable. It shouldn't only disable. Then the tooltip should be updated to read: "Right-click to toggle the loop or range."

    Does that sound like a safe request to make?

     
  • ell1e

    ell1e - 2021-10-16

    Sorry if I am not interpreting everything right, but regarding inserted items that expand the song: if rosegarden is set to loop without a range (=full composition) I would expect that to get applied immediately, that is if the full composition loop is unpaused and playing then it should continue to the new ending immediately. Similarly, if an item is deleted, at worst even shortening the song such that the playback position is past the full song's ending now, I would expect it to immediately jump to the start of the composition if the playback is now "outside" the song range. Also, if the loop range is set to something custom (not-full-song range) and I clear it, I personally would expect from then on the full composition to be looped without any further action (rather than looping itself also being disabled and needing to be re-enabled for that to happen) - but I can see how some others might find that weird. But I think that is how REAPER and LMMS handle it, if I don't remember this totally incorrectly. And of course this is all just my opinion and I might have misunderstood some of the above, so I hope this helps.

     
  • Ted Felix

    Ted Felix - 2021-10-16

    Thanks for the clarification. That's really helpful.

    So this is more of a "loop all" mode unrelated to the ruler. Whereas what we have now is a "loop some" mode that uses the ruler.

    This will probably need some sort of new mode button on the transport (or a third mode for the existing loop button or something) and an appropriate indicator on the ruler (make it red or something) along with changes to the playback logic (Phillip was just in there for the stop-at-end feature and it looks pretty straightforward). Should be doable.

     
  • Philip Leishman

    Philip Leishman - 2021-10-22

    I have made the whole song loop dynamic to immediately reflect changes in size of the song. Needs some testing!
    Please merge again.
    As to the gui I rather like the idea if a three state button for looping:
    Press once - loop with the stored loop set on the ruler (if none set skip to next state).
    Press again - loop the whole song
    Press again - return to no loop state.
    The button would need additional icons to indicate the loop state (off/ruler loop/whole song). Anyone artistic ?
    Opinions please. Ell1e - Does that give you what you want ?

     
  • ell1e

    ell1e - 2021-10-22

    It depends. The following would be bad:

    1. If I want to go from looping the entire song to a segment, I set a loop range. Sadly it's ignored because I'm still in the loop whole song state...
    2. I then press the tri-state button until I am in the loop range state.
    3. If I want to get back to whole song I clear the segment range (because I often loop different segments, so this is in anticipation of "clearing the state for a different one") - except now I'm not looping at all because that cleared any loop state and I need to click around the tri-state to get back into full song.

    The following would be good:

    1. If I want to go from looping the entire song to a segment, I set a loop range, which automatically goes from full song loop to loop range state. Cool!
    2. I'm done with the segment and want to do entire song again, so I clear the loop range which gets me back to looping entire song mode and not no loop at all.

    Basically it matters a lot if you'll make me click the tri-state a lot, because any additional click is just terribly annoying. Also, I feel like it might be confusing in any case - because clearing the loop range, the tri-state needs to change in some way (to either full song loop which I'd highly prefer, or no loop at all) without the user clicking it which is confusing.

    So no, I don't think the tri-state is a good idea. But if the auto-transitions are right at least it wouldn't be too annoying, but that doesn't make it conceptually useful or less confusing. I think just having two states (looping or not) which are modified by a loop range (set for partial loop or unset for entire song loop) is a lot cleaner in design, and also how REAPER works for example.

     
  • ell1e

    ell1e - 2021-10-22

    (To clarify more: what you suggest, actually clicking the tri-state button is just a very useless task to me. Because if I want to loop the entire song again I'd want to clear out the shorter loop range anyway because otherwise it'll still be there for my next shorter loop, causing me more clicks if I want to do that again next time but with another shorter loop. I can basically never see myself click the tri-state button itself as you suggest, I don't see the use case. I never want to be in entirely unlooped mode anyway, so I don't see why I would ever operate it beyond initially getting into the loops.)

     
  • Ted Felix

    Ted Felix - 2021-10-24

    two states (looping or not)

    We have that. Though the right-click behavior only turns looping off and never back on. That needs to be fixed.

    modified by a loop range (set for partial loop or unset for entire song loop)

    We have the loop range, but not the concept of "unset" or a "null loop". How about Ctrl+Right-click in the ruler to clear the loop, thus turning on "loop all" mode? Then you have access to all three modes directly from the ruler.

     
  • ell1e

    ell1e - 2021-10-24

    Why does right-click disable looping entirely and not just clear the loop range? CTRL+Right-click sounds like it'll both be clumsy to use (I usually don't have my hands on the keyboard) and have low discoverability. I'd also guess getting from looped segment to looped entire song (once that is possible) would be used more than getting from looped segment to out of any looping by power users.

    I also still don't understand how a tri-state button adds anything, your response just basically explains why it would best case not hurt too much - which is good, but it's still making it more conceptually complex and I'm not really seeing the benefit.

    Edit: to clarify the "no tri-state" suggestion, I think at least for advanced users the best would be to decouple the loop transport button and loop range entirely, such that setting/clearing the loop range wouldn't enable/disable looping, and enabling/disabling looping via the transport button wouldn't mess with the range. It's slightly less intuitive for beginners, but more powerful to work with for advanced users and conceptually simpler and more predictable once the user understands this - and it saves you the work on some tri-state button, too.

     

    Last edit: ell1e 2021-10-24
  • Philip Leishman

    Philip Leishman - 2021-10-24

    Hmm.. I think we are edging towards a solution here.
    So no tri-state button. Looping is either on or off.
    If a range is set looping is in that range.
    Range can be set or reset in the ruler.
    Right click in the ruler clears the range but does NOT unset looping (so it goes back to looping the whole song).
    Are we getting close ?

     
  • ell1e

    ell1e - 2021-10-24

    Yes, that sounds good! I mean to be fair, if anyone else likes the tri-state button more as well then maybe go for it. This is just my thoughts from using REAPER for some years where it's decoupled as I explained, if I recall correctly.

    And I can certainly see how setting a loop range and it then being ignored until the looping is also enabled could be confusing for beginners at first. (This would be the case if following the unlink idea fully, and it's also how it works in REAPER. It does I feel like just give more flexibility with less clicks for experienced users though, so it's a trade-off.) I guess a compromise idea would be to enable looping if disabled when a loop range is set, but not disable it when the loop range is unset? Although I'm not sure that may not come off as more confusing to some people, it's hard for me to tell.

     

    Last edit: ell1e 2021-10-24
  • Ted Felix

    Ted Felix - 2021-10-25

    I'm trying to preserve the existing behavior as much as possible to avoid tripping up our current users. Having right-click turn on a new full composition looping mode is not how Rosegarden works. That is going to be an unpleasant surprise for someone.

    So I'm going to have to defend right-click as enable/disable looping.

    I'm sure we can come up with a clever solution that works. If Shift+Right-click is too difficult, then we already sort-of support an empty range by right-click dragging and going back until you see just a line. That can be unset and therefore loop all. Or we could also add a keyboard shortcut. I don't think there are a lot of keys that do all that much in the main window, so there are probably plenty to choose from. Matrix and Notation are more problematic as they use the keyboard extensively. Worst case we can add a "loop all" mode to the preferences that means when looping is "off" it's actually looping all. (This would give you exactly what you want and disrupt no one else, but it does obscure the feature from those that might find it useful.) And I'm sure we can come up with plenty more options for this.

    Also note that the "stop at end of last Segment" feature might be problematic for some users. Those that use JACK transport sync might suddenly be surprised by their DAW stopping well before it should with this new feature. This will probably need to be made into an option before I can merge it.

    There are a lot of users and a lot of history here. We've got to be careful when making changes like this.

     
  • ell1e

    ell1e - 2021-10-25

    I think a preference actually would be great, specifically for the "mode transitions":

    Basically loop all would always exist, but by default setting a loop range would go from looping off or loop all to loop segment, and right-clicking or shrinking the range to a line would go from looping range to looping off. Then there could be a setting "Unlink loop mode and loop range changes", so that setting a loop range will leave looping off if it was off, and unsetting a loop range will keep looping on if it was on (hence drop to loop all in that case and not loop off as it always does now). Using the transport loop button would also no longer wipe out the loop segment or set it back if toggled. How does that sound?

    I think most power users like me who would appreciate this more flexible unlink would be ok with digging up an option. (By which I mean if the default is to NOT unlink that would be fine.) The option should ideally be global, so not per project.

     

    Last edit: ell1e 2021-10-25
  • Ted Felix

    Ted Felix - 2021-10-25

    Ok, sounds good. One final thought. I know you are opposed to the tristate button, but since Right-Click is clearly incomplete, it seems to me that it would be safe to make Right-Click on the ruler rotate through loop off, loop some, loop all. (We could still have the preference which would simply cause "loop off" to be skipped. Call it "Loop always".) How does that sound?

     
  • ell1e

    ell1e - 2021-10-25

    I don't know, I think I'd find it rather confusing. I see right-click as clearing the loop range, not a mode change so that doesn't make much sense to me. If it cycles through three variants and I only use two (loop segment with range set, or loop all with it unset) then it also wastes my time. With the unlink option set, I would definitely find it very unexpected.

    I think beginners or legacy users with that option unset might also find it confusing, since they would probably expect to just cycle between range set + loop range and range unset + loop off, but maybe I'd be wrong on that one and they'd actually like that. In any case, I think with the "unlink" active it doesn't make too much sense.

    We could still have the preference which would simply cause "loop off" to be skipped. Call it "Loop always"

    I wouldn't really find that intuitive, and inferior to an unlink option. I don't want to loop always necessarily, just to have the loop range being changed not mess with my looping being enabled or disabled. I DO disable looping sometimes (not often but it happens), and going into the preferences for that sounds super clumsy.

     

    Last edit: ell1e 2021-10-25
  • Ted Felix

    Ted Felix - 2021-10-27

    Ok. Let me piece together a proposal based on this discussion and see if anyone on the user list has any opinions. Hopefully that will give us a more clear idea which way to go with this.

     
  • Philip Leishman

    Philip Leishman - 2021-10-28

    OK good idea. My thinking at the moment is that it would be good to separate the setting of a range and the loop functionality as ell1e suggests. Loop without range then loops the whole song. Also the right click on the ruler could toggle the stored loop.

     
  • Ted Felix

    Ted Felix - 2021-10-30

    Ok, after re-reading all this discussion, I think I have a super-simple proposal that will make everyone happy. No option is required in the preferences and all modes are easily accessed via Right-Click and Drag. Plus changes to existing behavior are minimal. Here's how it works...

    • Right-Click and drag on the ruler will specify a loop range and enable looping. This is the current behavior. No change.
    • Right-Click on the ruler will disable looping of any kind. No change here either.
    • Right-Click and drag back and forth to a null loop will turn on the new "loop all" mode and enable looping.

    The main use case was going back and forth between loop some and loop all. That's the first and third bullets above. If you ever need it off, just right-click. Should be pretty easy to get the hang of.

    So, how does this sound? Have I missed anything? (Other than indicators and the transport which we can work out separately.)

     
  • ell1e

    ell1e - 2021-10-30

    I don't know, an option while possibly more complex to learn about would be very discoverable. This doesn't sound discoverable at all. It would work for me since you told me, but I think keeping simple right-click and zero range drag the same would be way better for others trying to find this. I just think an option unlinking loop range and loop on/off is something people can find complex but at least reason about in their head why it exists and how it might work, while any sort of too hidden special shortcut just will never be found by most people. Or they might even think it's a bug if they run into it by accident. Also, while it's better than CTRL+right click (which requires putting on a hand on the keyboard) it's still a slightly more mechanically complex action to execute often compared to a right click, even though I guess that's a really minor nitpick.

     

    Last edit: ell1e 2021-10-30
    • Ted Felix

      Ted Felix - 2021-11-02

      We have tooltips for discovery. It will be documented there and should be picked up rather quickly and easily.

      I think I do get you're unlink idea now. It was a bit of a mystery to me before. Let me see if I understand it by restating it in terms of each interaction...

      • Right-click and drag will set a loop but have no effect on turning looping on and off.
      • Right-click and drag to a zero range will turn on "loop all" but not turn looping on or off.
      • Right-click will always toggle looping on and off.

      Do I have this right?

      I have no problem with any of these ideas if we are leaving original behavior in place. My main concern right now is that November 10 is feature freeze and since we're really close here, I'd like to at the very least get some form of "loop all" into 21.12. Too ambitious?

       
1 2 3 4 > >> (Page 1 of 4)

Log in to post a comment.