BPM delay time converter

Andrew Booker 2007-11-22 23:38:27

My head is full of gig or site projects that would be fun and cool to try out one day, if I could ever stop watching TV and sitting around doing nothing.

One thing I did manage to knock up quickly in time for the gig last week was a very simple BPM delay time calculator. I cannot understand how I managed without this before. Firstly, when we're improvising our way through a gig, one dependable source of variety is to change the tempo. Secondly, I like to use a delay in my drum effects. Those two statements are connected by the requirement that, if you want the delay to work, it has to be of a value that corresponds somehow to the tempo.

A while ago I made a conversion table in excel and took a printout to gigs, but it wasn't much use. All the BPMs on my table were in units of 10, and anyway often I need to work in the other direction, starting with a delay time and looking for a tempo that will fit. So last week I sat down and worked out a nice way of getting delay times in milliseconds from BPM values, and vice versa.

It may not be a calculation you can do easily in your head, but the relationship between BPM and delay tempo is really straightforward. BPM means beats per minute. Put another way, for a BPM value of b there are b / 60 beats per second. Or 60 / b seconds per beat. Or even better, 60000 / b milliseconds per beat. See? We're scorchingly close already.

Suppose I wanted a delay that repeated exactly on the beat. That means for a given BPM value I need the number of milliseconds between each beat. I've already got it:

T = 60000 / b

But often I want a delay that falls in interesting places within the beat. Subdividing the beat by four as people often do, I might want the delay to land on the quarter-note before the next beat, or more generally, a delay time that is three quarters of the beat length. Easy:

T = ( 3 / 4 ) * 60000 / b

I can express this more generally as:

T = ( d / n ) * 60000 / b

where n is the number of subdivisions within a beat, typically four, and d is the length of my delay in subdivisions, in this case three. For a real example, suppose the tempo is 120 bpm and I want to know the delay time corresponding to half a beat. Plugging that into the expression:

T = ( 0.5 ) * 60000 / 120 = 250 ms

The nice thing about this expression is that you can swap T and b around and it still works:

b = ( d / f ) * 60000 / T

Suppose I have a 703 ms delay on my effects unit. What speed to we play if I want the delay to land exactly on the beat?

b = ( 1 / 1 ) * 60000 / 703 = 85 bpm

Nice. All I need now is a handy little application to run the formula for me when I enter a number. Here is the html page I made, which unlike the rest of the stuff on this site it is completely self-contained so that I can use it in a gig without needing access to the internet. It also means you can save the html page and use it offline yourself.

To try it, key in 93 into the tempo box and press the enter or tab key. A table appears with a list of delay times in milliseconds in the right hand column. In the left column is the corresponding list of beat subdivision alternatives. You should be able to tell what's going on. For example, look at the row with the delay time of 161 ms. In the left hand column it says |!..| which means that the signal will be delayed by a quarter of a beat. Nearer the top of the list I've subdivided the beat into three (triplets) rather than four (eg semiquavers).

As a technical application it's not genius or especially robust. I haven't done any input validation or anything like that yet (when you're trying to play a gig you don't want to be clicking OK dialogs every time your fingers slip), however I have done a little bit of filtering for small delay times. BPM values much above 200 aren't that realistic, so it comes up with a value over 250, it leaves a blank. Try entering a delay of 188 ms. You'll see the fastest tempo is 239 bpm.

Whichever way we decide the speed for a new piece during a gig, this little tool is useful. Maybe someone suggests a tempo, in which case I enter it into the BPM box and get a load of delay time options to set my DP4 effects unit to. Or, I spin the jog-wheel on the PD4 a couple of times until it lands on some weird number, ooh... I dunno... 1178, then I enter the delay time and get a range of possible BPMs to play at. I decide I want a delay every seven semiquavers, and shout out eighty-nine! to Os. I actually prefer the second approach because it's faster to type in the value into the web page than it is to select a three or four figure number with a wheel, even approximately.

And yes, I am serious about a delay every seven semiquavers (the |...|..! row in the list). I've tried it at home and it's easy, I tried it at a gig once when it was much harder to hear and fluffed it, but now that Os is giving me a click track, I only need to play to that and everything will just work.

If only you believed me :)

Gig ten << | >> Cellistica at M3M this Saturday