Normalizing Tempos

I want to share a technique for sampling songs with fluctuating tempos. It wasn’t obvious to me how to do this but in the end Ardour made it accurate and (relatively) painless once I figured out the right order of operations.

I downloaded a folk-rock song I like. I split the stems using demucs which helped me focus on aligning the drums, though this is completely optional.

For each section, I played the track through Ardour and used “Edit Tempo > Tap Tempo” to estimate the tempo. Then I turned on the metronome and listened back while also watching the waveforms pass by; especially I looked at where the drums and bass hits were to see if they lined up with the bars; if they hit too early or two later I adjusted the BPM up or down a few BPM at a time. Once I was satisfied that the metronome was matching the song I played it to the next tempo change, added a tempo marker on the tempo ruler, and repeated the tap-to-guess metronome-to-check dance.

(Eventually I realized that my song used whole number tempos everywhere, which was handy.)

It’s a little hard to read in the screenshot but I ended up discovering this tempo map:

  • bar 1 to 23: 160 bpm
  • 23 to 55: 116 bpm
  • 55 to 167: 140 bpm
  • 167 to 215: 104 bpm

I added location markers at each tempo change and labelled them with the bar line for later.

Once I had the tempo map, I normalized the tempo to 136 bpm:

  1. Split each region at the location markers into sections.
  2. Replace the tempo map with a single constant 136 bpm tempo
  3. Using the grab tool (G shortcut) and the time stretch tool (T shortcut) to place, shrink or grow each section to line up with the original bar lines from the labels; since the tempo map has changed, the bar lines have moved, and placing the sections back to their places in the new tempo ensures they follow the stated tempo.

There was also a tempo ramp at the end but while I tried to match it using Ardour’s tempo ramp feature I couldn’t get it; I don’t think the band played it perfectly linear (and why would they?) so instead I just cut that part up into single bars manually and stretched each of them to fit one bar in the target tempo; it’s not perfect but it’s good enough to sample with.