QLC+ 5: BPM Tap averaging

Post Reply
Wazzledi
Posts: 21
Joined: Thu Aug 10, 2023 1:37 pm
Real Name: Dennis Suermann

Hello everyone,

while testing and using QLC+ 5, I came across the new BPM system and the missing SpeedDial in the Virtual Console.
One thing that always bothered me was when tapping the BPM it only needs a small deviation in the tap timing to mess with the BPM, because the BPM gets updated every tap to the current duration.

For my personal usage, I implemented a simple average calculation in the tap functionality, which works well enough for me.

As awwright stated in the SpeedDial code for v4:
Tempo detection is not as easy as averaging together the durations, which causes all but the first and last taps to cancel each other out.
So, In v4, the SpeedDial uses some linear regression method to determine the beat duration.

So here is my question:
Is anyone interested in a BPM detection algorithm in v5 that is implemented as in v4?
If so, I would offer to migrate the old algorithm into v5.

@mcallegari Should the current tap detection stay the same in the official version or could it be changed to a better detection.
User avatar
GGGss
Posts: 3052
Joined: Mon Sep 12, 2016 7:15 pm
Location: Belgium
Real Name: Fredje Gallon

That is indeed an annoying problem - with EVERY desk in the industry.
Nothing ... + TAP + TAP + TAP does an average calculation resulting in a new tap+tap+tap - tap+tap - pacing the new tempo.
So here is my answer:
If you want to tap the BPM (tempo) ... quickly do 4/4's or even 16/4's - you will be cool.
We all hav been doing this since evrrrr
All electric machines work on smoke... when the smoke escapes... they don't work anymore
Wazzledi
Posts: 21
Joined: Thu Aug 10, 2023 1:37 pm
Real Name: Dennis Suermann

@GGGss Ok, maybe I understood your answer wrong, but that is not related to the explained problem and solution.

So, my main problem was that the BPM tap solution which is implemented in QLC+ 5 is not the same as in QLC+ 4. Which means, that in QLC+ 4 the SpeedDial uses the linear regression of collected taps to average the BPM i.e. the ms between each beat. In QLC+ 5 this is not used. The BPM is directly set at every tap.
Let me give a short example in QLC+ 5:
I have a song playing at 140 BPM. I tap along the beats to match the bpm. The first three beats are tapped perfectly, so the BPM is set to 140.
If I now make a small mistake with tapping the fourth beat, e.g., slightly too fast, the BPM is instantly set to 142, resulting in too fast chasers or functions.
The solution you suggested by quickly doing 4/4's is viable, but when you are wrong on the last beat, it sets the BPM to a wrong number.

In QLC+ 4 this problem does not occur since it is average with the linear regression method and your suggestion to do 4/4's (16/4's) is valid.
So, to prevent this problem, I implemented averaging to the BPM tapping function.

My main concern was, and is, if the algorithm from QLC+ 4 should be migrated to QLC+ 5 and if someone would be interested in this.
User avatar
mcallegari
Posts: 4710
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

I think v4 optimizations came after v5 tap was implemented.
So yes, let's improve v5
Wazzledi
Posts: 21
Joined: Thu Aug 10, 2023 1:37 pm
Real Name: Dennis Suermann

@mcallegari I added it to QLC+ 5 and submitted a pull request.
Post Reply