Skip to content

Kontrol S4 Mk3: rework jogwheel speed compute and motorized platter#13393

Merged
ywwg merged 1 commit intomixxxdj:2.5from
acolombier:fix/s4mk3-motor
Sep 19, 2024
Merged

Kontrol S4 Mk3: rework jogwheel speed compute and motorized platter#13393
ywwg merged 1 commit intomixxxdj:2.5from
acolombier:fix/s4mk3-motor

Conversation

@acolombier
Copy link
Copy Markdown
Member

@acolombier acolombier commented Jun 22, 2024

  • Rework how the speed is computed when scratching in order to make it more accurate and sharp
  • Reword motorized jog wheel to be more accurate
  • Add main cue haptic feedback

Targeting 2.5 as it is a bugfix, reported multiple times.

@acolombier acolombier force-pushed the fix/s4mk3-motor branch 2 times, most recently from 80dac49 to c852f29 Compare June 23, 2024 12:55
@acolombier acolombier changed the base branch from main to 2.5 June 23, 2024 12:56
@acolombier
Copy link
Copy Markdown
Member Author

@ywwg if you have a chance, could you give that a go? 🙏

@JoergAtGithub JoergAtGithub requested a review from ywwg July 25, 2024 18:12
@ywwg
Copy link
Copy Markdown
Member

ywwg commented Jul 25, 2024

testing these changes, I didn't notice anything haptic about the main cue. What is it supposed to do?

@Kasper0s
Copy link
Copy Markdown

Built branch traktor-s4-mk3-bleedingedge and I can report the haptic cue function is there. =)

For the motorised platter, scratching feels nice and the tempo no longer "swims".
One issue though is that small adjustments of phase aren't possible by braking or speeding up the platter. The platter isn't responsive to adjustments up until a threshold.

@acolombier
Copy link
Copy Markdown
Member Author

@ywwg haptic feedback strength is controlled by the Jogwheel torque setting. Traktor uses a value of up to 48000 (no idea the unit here), while we default to a max of 25000 (customizable to 32000 max, although you can override to higher value if you want to).
Two reasons I reduced the max compared to Traktor: the speed the platter would rotate at is seriously worrying, but also you can hear a mechanic noise that feels like it shouldn't be used for more than couple of μs (which is what Traktor does, as it has a polling interval going to a handful of μs, allow a very fast reactivity, while Mixxx has a static 20ms interval)

Thanks for the feedback @Kasper0s !

One issue though is that small adjustments of phase aren't possible by braking or speeding up the platter

Sadly, this is going be a either/or fix: that feature would require fast reactivity of the controller in Mixxx, but for performance reasons, the polling rate interval is limited to 20ms as mentioned above, which isn't enough to handle the platter movement.

@ywwg
Copy link
Copy Markdown
Member

ywwg commented Jul 31, 2024

for what it's worth, the amount of flutter on a real turntable is large, around +/- 2 bpm per rotation of the platter. How much were we seeing without the smoothing? Without the ability to adjust pitch delicately by touching the platter, this function is not very useful.

@acolombier
Copy link
Copy Markdown
Member Author

I tend to agree with you, but there was a few report on this being a problem for user. I guess the issue comes if you play to tracks, as the desync isn't consistent around the decks. Happy to make that new behaviour configurable?

@ywwg
Copy link
Copy Markdown
Member

ywwg commented Aug 1, 2024

does the wheel have touch detection? we could use high smoothing when there's no touch, and then immediately go to instant feedback when the wheel is touched.

@Kasper0s
Copy link
Copy Markdown

Kasper0s commented Aug 2, 2024

@acolombier I'm available for testing. =)

does the wheel have touch detection? we could use high smoothing when there's no touch, and then immediately go to instant feedback when the wheel is touched.

This looks like a sound idea. Could do 2 finger braking (or pinch brake heh, nvm), for users accustomed to using the sides for brakes.
In case unclear, the top has touch sens, while the side has a TPU'ish coating with ribs.

Another idea: since rotary encoders move&loop have touch sens, incorporating this for the braking .. it's good to have good support while making adjustments but it sounds like a big learning curve until used to it.
This would although still leave enabled a way to use it as a trigger for another function .. winkwink (likely it only senses touch though, not pressure?)

@ywwg
Copy link
Copy Markdown
Member

ywwg commented Aug 2, 2024

We can merge what we have and then experiment with different smoothing amounts / touch detection.

I would also love to know how Traktor does it -- the flutter of the platter is physical, so they are adapting for it somehow

@acolombier
Copy link
Copy Markdown
Member Author

We can merge what we have and then experiment with different smoothing amounts / touch detection.

I think it'd be great. I agree that more could be done, but also it sin't on my priority for the S4 MK3 (I have restarted putting full steam on the screens support)

@ywwg I let press the button if you are happy with this :)

@acolombier acolombier added this to the 2.6-beta milestone Sep 19, 2024
@ywwg ywwg merged commit cf62f3a into mixxxdj:2.5 Sep 19, 2024
@acolombier acolombier deleted the fix/s4mk3-motor branch September 19, 2024 21:28
@Michael-Z-Freeman
Copy link
Copy Markdown

Hi is this in the latest 2.5.1 release ? How does this relate to https://github.com/mixxxdj/mixxx/wiki/Components-JS#jogwheelbasic ?

@Swiftb0y
Copy link
Copy Markdown
Member

Swiftb0y commented May 5, 2025

Yes, this is a fix in the 2.5.1 release. However, this PR and the linked article don't relate to each other at all. JogWheelBasic is not used in this S4 mapping and JogWheelBasic has no notion of of motorized platters or anything of that sort. It's simply a convenient wrapper around the engine.scratch* functions.

@Michael-Z-Freeman
Copy link
Copy Markdown

Yes, this is a fix in the 2.5.1 release. However, this PR and the linked article don't relate to each other at all. JogWheelBasic is not used in this S4 mapping and JogWheelBasic has no notion of of motorized platters or anything of that sort. It's simply a convenient wrapper around the engine.scratch* functions.

Hi. Right, thanks. What should I be looking at for motorized platters ?

@ywwg
Copy link
Copy Markdown
Member

ywwg commented May 5, 2025

the javascript implementation for this controller has code for the motorized platters

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants