option to preselect loop- and beatjump-length

Bug #1429331 reported by Switch on 2015-03-07
This bug affects 4 people
Affects Status Importance Assigned to Milestone

Bug Description

It would be awesome to have the possibility to preselect an amount of beats ( 4, 8, 16, etc.), to use it as loop length or at least as beatjump-length. In my work-flow (with Traktor Pro) I'm using different sizes of beatjumps, in Mixxx I can only map one persistent beatjump-length to one specific button on my DJ-Controller. So its impossible to use different lengths. I guess I could manage to create a working controller-script, but this way i cant see the preselected length. Please correct me if I'm wrong.

Im participating at such an project for the first time and i don't speak English natively, so please be patient <3

Switch (switch-2) on 2015-03-07
tags: added: usability
tags: added: looping midi
tags: added: skin
Owen Williams (ywwg) wrote :

This type of function is probably best implemented in javascript for your particular controller

Owen Williams (ywwg) wrote :

We might be able to implement some notion of a "create default loop" control and a "default loop size" that can be changed with a controller.

Changed in mixxx:
importance: Undecided → Wishlist
status: New → Confirmed
Be (be.ing) wrote :

A number of controllers have this feature and at least the Traktor Kontrol X1 has separate encoders for each deck. I think a default loop size setting per deck would be helpful so this does not need to be reimplemented for each controller. It wouldn't necessarily need scripting, just mapping a signal to adjusting the default loop size and another to setting a loop.

Some controllers (Traktor Kontrol X1 comes to mind) have a way to display the selected loop length on the controller. On such devices, displaying the loop length could be implemented in a controller script by sending a signal back to the controller.

Switch (switch-2) wrote :

@Owen: yes :) thats what i would like to see, with a mark at the selected loop-size in GUI. In my particular case, it's important to have this feature for beatjumping. Either with a control like "beatjump default loop-size forward / backward! (in this case beatjumping is linked to "default loop-size") or with the possibility to choose "default beatjump size" too (to make it independent).

btw: I'm about to build a custom controller (with brain V2) and I need the described feature desperately. But I don't like to build the layout for Traktor Pro since Mixxx&Linux are far to awesome. This would be a very useful thing, some controllers are already designed for this and I'm not the only one who'll get used to it, so I think it's a good idea to spend some effort to make this real.

Owen Williams (ywwg) wrote :

You could actually write this in javascript pretty easily by maintaining an internal variable for loop length, mutating it with an encoder, and then a button that triggers the correct Control Object based on the variable. Or in the meantime you can pick your own default loop length of 4 or 8 or whatever and just bind it directly to the button.

Sorry that we can't put a "rush" on specific features, I'll see if I can get to it since this would be fun

Changed in mixxx:
assignee: nobody → Owen Williams (ywwg)
Be (be.ing) wrote :

Sure it would be easy for you or me to do this in JavaScript, but any use of JavaScript would be an obstacle to less tech savvy users with no programming experience who just want to map their controller. This is a useful and common enough function that I think it is worth Mixxx handling natively. Particularly with the new and improved mapping GUI, it would be advantageous if utilizing this functionality of controllers did not require any JavaScript.

Controllers aside, this would be a nice functionality to have integrated into Mixxx's GUI and default keyboard mapping for everyone.

Be (be.ing) wrote :

Regarding keyboard mapping, I propose that double/halve default loop length controls would be activated by pressing Shift plus the keys currently set to doubling/halving the currently set loop. Also, set 4-bar loop would be replaced by setting a loop of the selected length.

Owen Williams (ywwg) wrote :

Right, my point is that if you urgently need this feature, I recommend writing it in javascript for now and then when it gets officially added you can use the official feature.

Daniel Schürmann (daschuer) wrote :

I do not fully understand the proposed changes.
Would you mind to describe the feature in terms of new CO objects and what will happen if their value changed.
Thank you.

Switch (switch-2) wrote :

First: thanks a lot for hear me!

I've just learned some Java-basics, but it should be enough to create a script which will do the job. But it's impossible to put out the value of the variable(loop-/beatjump-size) in GUI using this script, am i right? Anyway, this would be enough if i can rely on a better solution in future.

Be (be.ing) wrote :

Daniel, here is what I propose for control objects:
Deprecate beatloop_X_*, beatlooproll_X_*, loop_move_X_*, and beatjump_X_* controls.

Each of these would be positive numbers representing a number of beats. Setting loop_length would change the length of the loop if it set (whether the loop is enabled or not).

deprecate loop_toggle and make loop_enabled read/write. Setting loop_enabled to 1 would set a loop of loop_length beats from the play position. Setting loop_enabled to 0 would disable the loop.

loop_roll_mode: 0=normal loop mode, 1=rolling loop mode
loop_move: -1=move loop loop_move_length beats backwards, 1=move loop loop_move_length beats forwards
beatjump: -1=jump beatjump_length beats backwards, 1=jump beatjump_length beats forwards

In the skins, replace the numbered buttons and + and - sign buttons for setting loops with a display of loop_length with up/down arrows that would double/halve loop_length.

switch-2: Correct, you could not show that variable in the GUI. You could print it to debugging output, represent it on your controller somehow (mine has LED rings around the encoders, so that's how I show it), or you'd have to keep track of it in your mind.

Daniel Schürmann (daschuer) wrote :

Ah yes thank you I understand.

It would be nice, if we are able to still support the legacy GUI and controller buttons, with the new interface and without the need for a script. Will it be possible?

Be (be.ing) wrote :

How would any of what I proposed break backwards compatibility with old mappings? The only existing control that I propose changing the behavior of is loop_enabled, which is currently read-only so mappings don't set it and the behavior of scripts wouldn't change when reading loop_enabled. Everything else I propose is adding a new control. Keep the old controls for at least one release but mark them as deprecated on the wiki (which I still get an error when I try to edit btw).

Be (be.ing) wrote :

Owen, will you be able to implement this for 2.1? If not, I'll do it.

Radu (radusuciu) wrote :

Would love to have access to the loop_move_length and beatjump_length COs proposed above! I kinda like the current loop setup in Deere however, with number grid and loop halve/double buttons on the end.

Be (be.ing) wrote :

> Would love to have access to the loop_move_length and beatjump_length COs proposed above!

Doesn't seem like anyone's currently making that happen, so if you want to contribute that, please do.

> I kinda like the current loop setup in Deere however, with number grid and loop halve/double buttons on the end.

IMO this is cluttered and takes up way too much space. Part of the reason I think this would be good for all users is that the skin UIs could be cleaned up.

Radu (radusuciu) wrote :

Also, I've noticed that changing the beatjump length or loop_move length on one deck is mirrored to another. Is this behaviour desirable?

Be (be.ing) wrote :

Yeah, I've noticed that too. IMO that is a bug and not desirable. It does that because Deere defines its own ControlObject for those which is shared across all decks. I think the selected lengths should be specific to each deck.

Be (be.ing) wrote :

Elaborating on proposal in comment #11:
* When loop_move_size is 0, moving the loop forward/backward would move it by 1 beat, except if loop_size < 1, in which case move the loop by loop_size. This is how I have mapped the loop encoder on the Hercules P32, and I find it to be intuitive while mixing. If I need to move the loop more than 1 beat, then I turn the encoder multiple times.
* Skins should not show the loop_move_size and its default value should be 0, as the behavior described above will be sufficient for most (if not all) use cases.
* Skins should show: loop size, double/half loop size, loop move forward/backward; beatjump size, double/half beatjump size, beatjump forward/backward. Ideally the numeric displays on skins would allow users to click on them and manually type in a value.

Be (be.ing) wrote :
Changed in mixxx:
assignee: Owen Williams (ywwg) → Be (be.ing)
Be (be.ing) on 2017-02-15
Changed in mixxx:
status: Confirmed → In Progress
Be (be.ing) on 2017-05-25
Changed in mixxx:
status: In Progress → Fix Committed
Be (be.ing) on 2017-11-12
Changed in mixxx:
milestone: none → 2.1.0
Changed in mixxx:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Related blueprints