I originally found that my tracks with multiple markers in LXC exported badly to engine and made a bug report about it.
However, after Christiaan’s fix, small deviations remained, enough to throw off the bpm markers quite a bit at the end. Nothing drastic, but noticeable with some effects.
After some digging, I determined that his is not really a bug, but a difference in how LXC and Engine handle multi-marker beatgrids. The good new is that this can be fixed by a relatively simple workaround.
LXC handles new beatmarkers by dropping a new marker where it is. The old marker is never adjusted in BPM. Engine, however, drops a new beatmarker and adjusts the tempo of the previous marker in such a manner that new marker lands exactly on a One of the previous beat. This leads to differences in the export if there is a break in the tempo. The right way to do things in this case is to use three markers.
- The usual first marker at the beginning of the song
- An additional marker at the last One that is on time in the first beatgrid
- The final marker on the first One of the new section
This leads to engine stretching the short section between marker 2 and 3 in such a way that the tempos for marker 1 and 3 stay unaffected and on time.
This is only necessary if there are actual breaks in tempo, i.e. the final marker would not land on a full beat of the first grid. Screenshots will follow in an edit shortly.
Interesting find! Definitely interested in the screenshots.
If I understand correct, the fix/workaround is basically to add marker #2 at the exact same time as #3 so there is 0.0 seconds between those last 2?
No, not quite. Marker two would be on the last correct Downbeat (One) of the old beatgrid. that may be anywhere between a few hundred millisecond to several seconds. One example for a short break is “Macarena” from the bug report:
Marker #1 one is way off at the beginning of the track. The offset pointed out here will then be closed by engine DJ by changing the BPM of marker #2. to match the nearest beat (not bar!). this leads to Engine then possibly misplacing the 1 somewhere else, because Engine apparently can’t deal with half-bars.
Another extreme example is “Let me clear my throat”. After the famous “Freeze!” DJ Kool babbles for 20 seconds before he continues with the beat. So #2 would land on the "Freeze!) (which is exactly a one from the previous grid), and #3 would land where it continues. I’m uploading my library right now, so you can have a look at TestA/Multimarker. Relevant examples are: Macarena, Get Ugly, Single Ladies, Let me clear my throat and a few more.
Alright I made a tweak to how the grid is generated in Lexicon based on your findings. I think it actually improved grids overal because now it fixes the rounding difference that was in there as well.
The fix will be in the new beta branch that I’m launching one of these days. I’ll let you know!
Thanks for the detailed report
Neat! I didn’t expect this to be a fixable bug. Interested to see what you did there.
Honestly I was surprised how well the results looked in Engine after this tweak so this could definitely use some thorough testing and nit picking
This fix is now in the beta build of Lexicon, see #beta on Discord. Let me know if it works properly please!