Page 1 of 1

QLC+ 5: BPM Tap averaging

Posted: Wed Jan 10, 2024 1:28 pm
by Wazzledi
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.

Re: QLC+ 5: BPM Tap averaging

Posted: Wed Jan 10, 2024 5:00 pm
by GGGss
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

Re: QLC+ 5: BPM Tap averaging

Posted: Wed Jan 10, 2024 5:39 pm
by Wazzledi
@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.

Re: QLC+ 5: BPM Tap averaging

Posted: Thu Jan 11, 2024 8:36 am
by mcallegari
I think v4 optimizations came after v5 tap was implemented.
So yes, let's improve v5

Re: QLC+ 5: BPM Tap averaging

Posted: Thu Jan 11, 2024 4:06 pm
by Wazzledi
@mcallegari I added it to QLC+ 5 and submitted a pull request.