Zoë Blade's notebook

BPM to milliseconds

For working out things like delay lengths, it's useful to be able to convert tempos in BPMs into lengths of time in milliseconds. Here are some popular examples:

Simple metre

Tempo (BPM) 1/16 (♬) 2/16 (♪) 3/16 (♪.) 4/16 (♩)
80 187.50 375.00 562.50 750.00
85 176.47 352.94 529.41 705.88
90 166.67 333.33 500.00 666.67
95 157.89 315.79 473.68 631.58
100 150.00 300.00 450.00 600.00
105 142.86 285.71 428.57 571.43
110 136.36 272.73 409.09 545.45
115 130.43 260.87 391.30 521.74
120 125.00 250.00 375.00 500.00
125 120.00 240.00 360.00 480.00
130 115.38 230.77 346.15 461.54
135 111.11 222.22 333.33 444.44
140 107.14 214.29 321.43 428.57

Compound metre / triplets

Tempo (BPM) 1/12 (♪3) 2/12 (♩3) 3/12 (♩)
80 250.00 500.00 750.00
85 235.29 470.59 705.88
90 222.22 444.44 666.67
95 210.53 421.05 631.58
100 200.00 400.00 600.00
105 190.48 380.95 571.43
110 181.82 363.64 545.45
115 173.91 347.83 521.74
120 166.67 333.33 500.00
125 160.00 320.00 480.00
130 153.85 307.69 461.54
135 148.15 296.30 444.44
140 142.86 285.71 428.57

Source code

I tabulated these using a simple C program, bpm-to-ms.c:

/* BPM to MS converter, for ANSI C, by Zoe Blade, 2015-12-06 */

#include <stdio.h>
#include <stdlib.h>

void beatsPerMinuteToMilliseconds(int beatsPerMinute) {
    float millisecondsPerBeat;
    int sixteenths;

    /*
     * MS per beat = 60 seconds / BPM * 1000 MS in a second
     *             = 60000 MS per minute / BPM
     */

    millisecondsPerBeat = 60000.0 / beatsPerMinute;

    for (sixteenths = 1; sixteenths < 17; sixteenths++) {
        printf("%3d\t   %2d\t%7.2f\n", beatsPerMinute, sixteenths, millisecondsPerBeat / 4 * sixteenths);
    }

    return;
}

int main(int argc, char *argv[]) {
    int beatsPerMinute;

    printf("BPM\t16ths\tMS\n");
    printf("===\t=====\t=======\n\n");

    if (argc == 1) {
        for (beatsPerMinute = 80; beatsPerMinute < 145; beatsPerMinute += 5) {
            beatsPerMinuteToMilliseconds(beatsPerMinute);
        }
    } else {
        beatsPerMinuteToMilliseconds(atoi(argv[1]));
    }

    return 0;
}

To use compound instead of simple metre, replace 60000.0 with 80000.0.

C programs: BPM to milliseconds | Transposing tempos

Electronic music making tables: BPM to milliseconds | DX21 guide | Interval | MicroVerb III guide | Pitched tempos | Pitches | S1000 page map | ST MIDI sequencer timeline | Transposing tempos