I was playing around with the metronome functionality and noticed it seemed off, so I recorded an 8-second snippet at 100bpm and it seems there is a bit of quantifiable irregularity in the beat spacing.
The whole 8.8 s recording, one strip, with a grid of exactly 600 ms lines drawn over it. Cyan spikes are the click onsets (half-wave rectified envelope difference, so each attack is a sharp mark rather than a smear); the faint blue behind each is the real decay tail. Errors labelled underneath, red where the beat is 16 ms or more off.
Let me know if there’s anything else I can do to help diagnose. I checked this a few ways but am not confident in the analysis (though the sound does seem off to my ear and is what triggered my exploration in the first place).
Could you share the original recording that you fed to Capo? I’ve been working on revisions to the beat tracking algorithm for a future update, so I’m curious how my prototype code will do with this audio file.
One problem with beat tracking—at least, the way it runs now—is that it processes the song at a much lower frame rate than the original audio. That frame rate (~250Hz) is what gives you ~4ms of temporal resolution. Note that this should be plenty to accurately capture the typical beat rates of between 60-200bpm (1Hz-3.33Hz).
But here’s the thing—I wouldn’t expect to see errors worse than 4-8ms on a perfect beat signal. So I think there might be something else happening here—either there’s an issue with the tracking algorithm (not assigning correct timestamps for the beats), or the MIDI click scheduling (CoreAudio is playing the click sound early/late).
Hopefully I can learn more about what’s going on when I take a look at your file.