{"id":18765,"date":"2026-09-17T11:24:03","date_gmt":"2026-09-17T09:24:03","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/toolbox\/bpm-delay-time-calculator\/"},"modified":"2026-09-17T11:24:03","modified_gmt":"2026-09-17T09:24:03","slug":"bpm-delay-time-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/","title":{"rendered":"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations"},"content":{"rendered":"<div class=\"lw-bpm\" id=\"bpm-wurzel\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<style>\n.lw-bpm .bpm-reihe { display: flex; flex-wrap: wrap; gap: 12px 18px; align-items: flex-end; }\n.lw-bpm label.bpm-feld { display: flex; flex-direction: column; gap: 6px; font-size: 0.84rem; color: var(--text-secondary, #a0a0b0); }\n.lw-bpm input[type=number], .lw-bpm select { padding: 8px 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; font-size: 1rem; }\n.lw-bpm input.bpm-tempo { width: 140px; font-family: monospace; font-size: 1.45rem; font-weight: 700; padding: 6px 10px; }\n.lw-bpm .bpm-tap { background: var(--accent, #2ba6df); color: var(--on-accent, #0b1114); border: none; padding: 14px 30px; border-radius: 8px; font-weight: 700; cursor: pointer; font-size: 1.05rem; user-select: none; -webkit-user-select: none; touch-action: manipulation; }\n.lw-bpm .bpm-tap.bpm-blink { filter: brightness(1.25); }\n.lw-bpm .bpm-knopf2 { background: transparent; color: var(--text-secondary, #a0a0b0); border: 1px solid var(--border, #2a2a35); padding: 10px 14px; border-radius: 6px; cursor: pointer; font-size: 0.9rem; }\n.lw-bpm .bpm-tabelle { overflow-x: auto; margin-top: 10px; }\n.lw-bpm table { border-collapse: collapse; width: 100%; font-size: 0.88rem; }\n.lw-bpm th, .lw-bpm td { text-align: right; padding: 6px 10px; border-bottom: 1px solid var(--border, #2a2a35); white-space: nowrap; }\n.lw-bpm th:first-child, .lw-bpm td:first-child { text-align: left; }\n.lw-bpm th { color: var(--text-primary, #e8e8ee); font-weight: 700; }\n.lw-bpm td { color: var(--text-primary, #e8e8ee); font-family: monospace; }\n.lw-bpm td.bpm-name { font-family: inherit; color: var(--text-secondary, #a0a0b0); }\n.lw-bpm tr.bpm-viertel td { background: var(--bg-body, #14141a); }\n.lw-bpm .bpm-h { font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.98rem; margin: 28px 0 8px; }\n.lw-bpm .bpm-klein { font-size: 0.84rem; color: var(--text-secondary, #a0a0b0); line-height: 1.55; }\n.lw-bpm .bpm-ergebnis { font-family: monospace; font-size: 1.15rem; font-weight: 700; color: var(--text-primary, #e8e8ee); margin: 12px 0 4px; min-height: 1.4em; }\n.lw-bpm .bpm-fehler { color: var(--fail, #ff7b72); }\n@media (max-width: 480px) {\n    .lw-bpm table { font-size: 0.8rem; }\n    .lw-bpm th, .lw-bpm td { padding: 6px 6px; }\n    .lw-bpm .bpm-tap { padding: 14px 22px; }\n}\n<\/style>\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 18px;\">Delay times, LFO rates, compressor release and reverb tails sit tighter in a mix when they follow the tempo. The calculator converts a tempo into note lengths in milliseconds, hertz and samples, splits a note length into reverb pre-delay and decay, turns a number of bars into a duration and works back from a delay time to the tempo.<\/p>\n<div class=\"bpm-reihe\">\n        <label class=\"bpm-feld\">Tempo (BPM) <input id=\"bpm-tempo\" class=\"bpm-tempo\" type=\"number\" min=\"20\" max=\"400\" step=\"0.01\" value=\"120\" inputmode=\"decimal\"><\/label><br \/>\n        <button id=\"bpm-tap\" type=\"button\" class=\"bpm-tap\">Tap<\/button><br \/>\n        <button id=\"bpm-neu\" type=\"button\" class=\"bpm-knopf2\">Reset taps<\/button><br \/>\n        <label class=\"bpm-feld\">Sample rate <select id=\"bpm-rate\"><\/select><\/label>\n    <\/div>\n<p id=\"bpm-tapinfo\" class=\"bpm-klein\" style=\"margin: 10px 0 0;\" aria-live=\"polite\">Tap tempo: the T key or the button, several times in time; a pause of more than two seconds starts a new measurement.<\/p>\n<div class=\"bpm-h\">Note lengths<\/div>\n<div class=\"bpm-tabelle\">\n<table>\n<thead>\n<tr>\n<th>Note<\/th>\n<th>Straight (ms)<\/th>\n<th>Dotted (ms)<\/th>\n<th>Triplet (ms)<\/th>\n<th>Straight (Hz)<\/th>\n<th>Straight (samples)<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"bpm-noten\"><\/tbody>\n<\/table><\/div>\n<p class=\"bpm-klein\" style=\"margin: 8px 0 0;\">Dotted notes last 1.5 times the straight value, triplets two thirds of it. Hz is the rate of a cycle with that length, for example for an LFO.<\/p>\n<div class=\"bpm-h\">Reverb that ends on the grid<\/div>\n<div class=\"bpm-reihe\"><label class=\"bpm-feld\">Pre-delay <select id=\"bpm-predelay\"><\/select><\/label><\/div>\n<div class=\"bpm-tabelle\">\n<table>\n<thead>\n<tr>\n<th>Reverb ends after<\/th>\n<th>Length (ms)<\/th>\n<th>Pre-delay (ms)<\/th>\n<th>Decay (ms)<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"bpm-hall\"><\/tbody>\n<\/table><\/div>\n<p class=\"bpm-klein\" style=\"margin: 8px 0 0;\">Pre-delay and decay add up to the chosen length, so the tail ends before the next note of that value. Plugins measure decay differently (RT60 or until silence), so the value is a starting point.<\/p>\n<div class=\"bpm-h\">Bars to duration<\/div>\n<div class=\"bpm-reihe\">\n        <label class=\"bpm-feld\">Bars <input id=\"bpm-takte\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"8\" style=\"width: 110px;\"><\/label><br \/>\n        <label class=\"bpm-feld\">Time signature <select id=\"bpm-taktart\"><\/select><\/label>\n    <\/div>\n<p id=\"bpm-dauer\" class=\"bpm-ergebnis\" aria-live=\"polite\">\n<div class=\"bpm-h\">From delay time to tempo<\/div>\n<div class=\"bpm-reihe\">\n        <label class=\"bpm-feld\">Delay time (ms) <input id=\"bpm-rueck-ms\" type=\"number\" min=\"0.01\" max=\"60000\" step=\"0.01\" value=\"375\" style=\"width: 130px;\"><\/label><br \/>\n        <label class=\"bpm-feld\">Corresponds to <select id=\"bpm-rueck-note\"><\/select><\/label>\n    <\/div>\n<p id=\"bpm-rueck\" class=\"bpm-ergebnis\" aria-live=\"polite\">\n<div class=\"bpm-h\">How it is calculated<\/div>\n<p class=\"bpm-klein\" style=\"margin: 0 0 6px;\">A quarter note lasts 60,000 \u00f7 BPM milliseconds, so 500 ms at 120 BPM. All other straight note values follow by doubling or halving.<\/p>\n<p class=\"bpm-klein\" style=\"margin: 0 0 6px;\">Dotted = straight \u00d7 1.5, triplet = straight \u00d7 2\/3, frequency in Hz = 1000 \u00f7 length in ms, samples = length in ms \u00d7 sample rate \u00f7 1000.<\/p>\n<p class=\"bpm-klein\" style=\"margin: 0 0 6px;\">A bar lasts numerator \u00d7 4 \u00f7 denominator quarter notes; a 6\/8 bar therefore equals three quarter notes.<\/p>\n<p class=\"bpm-klein\" style=\"font-size: 0.8rem; margin: 14px 0 0;\">Everything is calculated in the browser. DAWs and plugins sometimes round delay times or show them as note values; the tables list the exact values.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Delay times, LFO rates, compressor release and reverb tails sit tighter in a mix when they follow the tempo. The calculator converts a tempo into note lengths in milliseconds, hertz and samples, splits a note length into reverb pre-delay and decay, turns a number of bars into a duration and works back from a delay time to the tempo.\",\"tempo\":\"Tempo (BPM)\",\"knopf_tap\":\"Tap\",\"knopf_neu\":\"Reset taps\",\"abtastrate\":\"Sample rate\",\"tap_hinweis\":\"Tap tempo: the T key or the button, several times in time; a pause of more than two seconds starts a new measurement.\",\"tap_status\":\"{taps} taps \u00b7 average interval {intervall} ms \u00b7 largest deviation {abweichung} ms\",\"tap_zu_wenig\":\"One more tap is needed for a tempo.\",\"fehler_tempo\":\"The tempo has to be between 20 and 400 BPM.\",\"fehler_takte\":\"The number of bars has to be at least 1.\",\"fehler_ms\":\"The delay time has to be greater than 0 ms.\",\"h_noten\":\"Note lengths\",\"sp_note\":\"Note\",\"sp_gerade\":\"Straight (ms)\",\"sp_punktiert\":\"Dotted (ms)\",\"sp_triole\":\"Triplet (ms)\",\"sp_hz\":\"Straight (Hz)\",\"sp_samples\":\"Straight (samples)\",\"noten_hinweis\":\"Dotted notes last 1.5 times the straight value, triplets two thirds of it. Hz is the rate of a cycle with that length, for example for an LFO.\",\"note_1\":\"1\\\/1 whole note\",\"note_2\":\"1\\\/2 half note\",\"note_4\":\"1\\\/4 quarter note\",\"note_8\":\"1\\\/8 eighth note\",\"note_16\":\"1\\\/16 sixteenth note\",\"note_32\":\"1\\\/32 thirty-second note\",\"note_64\":\"1\\\/64 sixty-fourth note\",\"art_gerade\":\"straight\",\"art_punktiert\":\"dotted\",\"art_triole\":\"triplet\",\"h_hall\":\"Reverb that ends on the grid\",\"predelay_als\":\"Pre-delay\",\"predelay_0\":\"none (0 ms)\",\"pd_128\":\"1\\\/128 note\",\"pd_64\":\"1\\\/64 note\",\"pd_32\":\"1\\\/32 note\",\"sp_hall_bis\":\"Reverb ends after\",\"sp_laenge\":\"Length (ms)\",\"sp_predelay\":\"Pre-delay (ms)\",\"sp_decay\":\"Decay (ms)\",\"hall_viertel\":\"1\\\/4 note\",\"hall_halbe\":\"1\\\/2 note\",\"hall_takt\":\"1 bar (4\\\/4)\",\"hall_zwei_takte\":\"2 bars (4\\\/4)\",\"hall_hinweis\":\"Pre-delay and decay add up to the chosen length, so the tail ends before the next note of that value. Plugins measure decay differently (RT60 or until silence), so the value is a starting point.\",\"h_takte\":\"Bars to duration\",\"takte\":\"Bars\",\"taktart\":\"Time signature\",\"dauer_satz\":\"{dauer} \u00b7 {sekunden} s \u00b7 {samples} samples at {rate}\",\"h_rueck\":\"From delay time to tempo\",\"rueck_ms\":\"Delay time (ms)\",\"rueck_note\":\"Corresponds to\",\"rueck_satz\":\"{bpm} BPM\",\"h_formeln\":\"How it is calculated\",\"formel_1\":\"A quarter note lasts 60,000 \u00f7 BPM milliseconds, so 500 ms at 120 BPM. All other straight note values follow by doubling or halving.\",\"formel_2\":\"Dotted = straight \u00d7 1.5, triplet = straight \u00d7 2\\\/3, frequency in Hz = 1000 \u00f7 length in ms, samples = length in ms \u00d7 sample rate \u00f7 1000.\",\"formel_3\":\"A bar lasts numerator \u00d7 4 \u00f7 denominator quarter notes; a 6\\\/8 bar therefore equals three quarter notes.\",\"grenze\":\"Everything is calculated in the browser. DAWs and plugins sometimes round delay times or show them as note values; the tables list the exact values.\",\"dezimal\":\".\",\"tausend\":\",\"};<\/p>\n<p>    var NOTEN = [1, 2, 4, 8, 16, 32, 64];\n    var ARTEN = ['gerade', 'punktiert', 'triole'];\n    var RATEN = [44100, 48000, 88200, 96000];\n    var TAKTARTEN = [[4, 4], [3, 4], [2, 4], [5, 4], [6, 8], [7, 8], [12, 8]];\n    var PREDELAY = [0, 128, 64, 32];\n    var TAP_PAUSE = 2000;   \/\/ ms ohne Tap: neue Messung\n    var TAP_FENSTER = 8;    \/\/ gemittelt ueber die letzten 8 Abstaende\n    var MIN_BPM = 20, MAX_BPM = 400;<\/p>\n<p>    \/\/ --- Rechnen ------------------------------------------------------------\n    function viertelMs(bpm) { return 60000 \/ bpm; }\n    function artFaktor(art) { return art === 'punktiert' ? 1.5 : (art === 'triole' ? 2 \/ 3 : 1); }\n    function noteMs(bpm, teiler, art) { return viertelMs(bpm) * 4 \/ teiler * artFaktor(art); }\n    function hz(ms) { return 1000 \/ ms; }\n    function samples(ms, rate) { return Math.round(ms * rate \/ 1000); }\n    function taktMs(bpm, zaehler, nenner) { return viertelMs(bpm) * zaehler * 4 \/ nenner; }\n    function bpmAusMs(ms, teiler, art) { return 60000 * (4 \/ teiler) * artFaktor(art) \/ ms; }\n    function tempoGueltig(bpm) { return typeof bpm === 'number' && isFinite(bpm) && bpm >= MIN_BPM && bpm <= MAX_BPM; }\n\n    \/\/ Taps: Zeitstempel in ms; eine Pause ueber TAP_PAUSE beginnt neu.\n    function tapHinzu(zeiten, t) {\n        if (zeiten.length &#038;&#038; t - zeiten[zeiten.length - 1] > TAP_PAUSE) { zeiten.length = 0; }\n        zeiten.push(t);\n        while (zeiten.length > TAP_FENSTER + 1) { zeiten.shift(); }\n        return zeiten;\n    }\n    function tapAuswerten(zeiten) {\n        if (zeiten.length < 2) { return null; }\n        var n = zeiten.length - 1;\n        var mittel = (zeiten[n] - zeiten[0]) \/ n;\n        var abw = 0;\n        for (var i = 1; i <= n; i++) { abw = Math.max(abw, Math.abs((zeiten[i] - zeiten[i - 1]) - mittel)); }\n        return { bpm: 60000 \/ mittel, intervall: mittel, taps: zeiten.length, abweichung: abw };\n    }\n\n    \/\/ --- Darstellung --------------------------------------------------------\n    function zahl(x, stellen) {\n        if (typeof x !== 'number' || !isFinite(x)) { return '\u2013'; }\n        var s = x.toFixed(stellen);\n        if (s.indexOf('.') !== -1) { s = s.replace(\/0+$\/, '').replace(\/\\.$\/, ''); }\n        if (s === '-0') { s = '0'; }\n        return s.replace('.', T.dezimal);\n    }\n    function ganz(x) {\n        var s = String(Math.round(x)), aus = '';\n        while (s.length > 3) { aus = T.tausend + s.slice(-3) + aus; s = s.slice(0, -3); }\n        return s + aus;\n    }\n    function text(schluessel, werte) {\n        return String(T[schluessel]).replace(\/\\{(\\w+)\\}\/g, function (m, k) { return werte && werte[k] !== undefined ? werte[k] : m; });\n    }\n    function dauerText(ms) {\n        var gesamt = Math.round(ms), h = Math.floor(gesamt \/ 3600000), m = Math.floor(gesamt \/ 60000) % 60;\n        var s = Math.floor(gesamt \/ 1000) % 60, rest = gesamt % 1000;\n        var ss = (s < 10 ? '0' : '') + s + T.dezimal + ('00' + rest).slice(-3);\n        return h > 0 ? h + ':' + (m < 10 ? '0' : '') + m + ':' + ss : m + ':' + ss;\n    }\n    function rateText(rate) { return zahl(rate \/ 1000, 1) + ' kHz'; }\n    function notenName(teiler) { return T['note_' + teiler]; }\n    function el(id) { return document.getElementById(id); }\n    function zelle(tr, inhalt, name) {\n        var td = document.createElement('td');\n        td.textContent = inhalt;\n        if (name) { td.className = 'bpm-name'; }\n        tr.appendChild(td);\n    }\n\n    function notenTabelle(bpm, rate) {\n        var tbody = el('bpm-noten');\n        if (!tbody) { return; }\n        tbody.textContent = '';\n        NOTEN.forEach(function (teiler) {\n            var tr = document.createElement('tr');\n            if (teiler === 4) { tr.className = 'bpm-viertel'; }\n            var gerade = noteMs(bpm, teiler, 'gerade');\n            zelle(tr, notenName(teiler), true);\n            zelle(tr, zahl(gerade, 2));\n            zelle(tr, zahl(noteMs(bpm, teiler, 'punktiert'), 2));\n            zelle(tr, zahl(noteMs(bpm, teiler, 'triole'), 2));\n            zelle(tr, zahl(hz(gerade), 3));\n            zelle(tr, ganz(samples(gerade, rate)));\n            tbody.appendChild(tr);\n        });\n    }\n\n    function hallTabelle(bpm, predelayTeiler) {\n        var tbody = el('bpm-hall');\n        if (!tbody) { return; }\n        tbody.textContent = '';\n        var pd = predelayTeiler ? noteMs(bpm, predelayTeiler, 'gerade') : 0;\n        [['hall_viertel', noteMs(bpm, 4, 'gerade')], ['hall_halbe', noteMs(bpm, 2, 'gerade')],\n         ['hall_takt', taktMs(bpm, 4, 4)], ['hall_zwei_takte', 2 * taktMs(bpm, 4, 4)]].forEach(function (z) {\n            var tr = document.createElement('tr');\n            zelle(tr, T[z[0]], true);\n            zelle(tr, zahl(z[1], 2));\n            zelle(tr, zahl(pd, 2));\n            zelle(tr, zahl(z[1] - pd, 2));\n            tbody.appendChild(tr);\n        });\n    }\n\n    function dauerZeigen(bpm, rate) {\n        var ziel = el('bpm-dauer'), takte = parseFloat(el('bpm-takte').value), ta = TAKTARTEN[parseInt(el('bpm-taktart').value, 10) || 0];\n        if (!ziel) { return; }\n        if (!(takte >= 1)) { ziel.textContent = T.fehler_takte; ziel.classList.add('bpm-fehler'); return; }\n        ziel.classList.remove('bpm-fehler');\n        var ms = takte * taktMs(bpm, ta[0], ta[1]);\n        ziel.textContent = text('dauer_satz', { dauer: dauerText(ms), sekunden: zahl(ms \/ 1000, 3), samples: ganz(samples(ms, rate)), rate: rateText(rate) });\n    }<\/p>\n<p>    function rueckZeigen() {\n        var ziel = el('bpm-rueck'), ms = parseFloat(String(el('bpm-rueck-ms').value).replace(',', '.'));\n        var wahl = String(el('bpm-rueck-note').value).split(':');\n        if (!ziel) { return; }\n        if (!(ms > 0)) { ziel.textContent = T.fehler_ms; ziel.classList.add('bpm-fehler'); return; }\n        ziel.classList.remove('bpm-fehler');\n        ziel.textContent = text('rueck_satz', { bpm: zahl(bpmAusMs(ms, parseInt(wahl[0], 10), wahl[1]), 2) });\n    }<\/p>\n<p>    function tempoLesen() {\n        var v = parseFloat(String(el('bpm-tempo').value).replace(',', '.'));\n        return isFinite(v) ? v : NaN;\n    }<\/p>\n<p>    function aktualisieren() {\n        var bpm = tempoLesen(), rate = parseInt(el('bpm-rate').value, 10) || 48000;\n        var info = el('bpm-tapinfo');\n        if (!tempoGueltig(bpm)) {\n            el('bpm-noten').textContent = '';\n            el('bpm-hall').textContent = '';\n            el('bpm-dauer').textContent = '';\n            if (info) { info.textContent = T.fehler_tempo; info.classList.add('bpm-fehler'); }\n            rueckZeigen();\n            return false;\n        }\n        if (info && info.classList.contains('bpm-fehler')) { info.textContent = T.tap_hinweis; info.classList.remove('bpm-fehler'); }\n        notenTabelle(bpm, rate);\n        hallTabelle(bpm, parseInt(el('bpm-predelay').value, 10) || 0);\n        dauerZeigen(bpm, rate);\n        rueckZeigen();\n        return true;\n    }<\/p>\n<p>    \/\/ --- Taps -----------------------------------------------------------------\n    var taps = [];\n    function tap(t) {\n        tapHinzu(taps, t);\n        var e = tapAuswerten(taps), info = el('bpm-tapinfo');\n        if (!e) {\n            if (info) { info.textContent = T.tap_zu_wenig; info.classList.remove('bpm-fehler'); }\n            return null;\n        }\n        var bpm = Math.round(e.bpm * 100) \/ 100;\n        if (tempoGueltig(bpm)) { el('bpm-tempo').value = bpm; }\n        if (info) {\n            info.textContent = text('tap_status', { taps: e.taps, intervall: zahl(e.intervall, 1), abweichung: zahl(e.abweichung, 1) });\n            info.classList.remove('bpm-fehler');\n        }\n        aktualisieren();\n        return e;\n    }\n    function tapsZuruecksetzen() {\n        taps.length = 0;\n        var info = el('bpm-tapinfo');\n        if (info) { info.textContent = T.tap_hinweis; info.classList.remove('bpm-fehler'); }\n    }<\/p>\n<p>    \/\/ --- Auswahllisten ----------------------------------------------------------\n    function option(sel, wert, beschriftung, gewaehlt) {\n        var o = document.createElement('option');\n        o.value = wert; o.textContent = beschriftung;\n        if (gewaehlt) { o.selected = true; }\n        sel.appendChild(o);\n    }\n    function listenFuellen() {\n        RATEN.forEach(function (r) { option(el('bpm-rate'), r, rateText(r), r === 48000); });\n        PREDELAY.forEach(function (p) { option(el('bpm-predelay'), p, p ? T['pd_' + p] : T.predelay_0, p === 64); });\n        TAKTARTEN.forEach(function (ta, i) { option(el('bpm-taktart'), i, ta[0] + '\/' + ta[1], i === 0); });\n        NOTEN.forEach(function (teiler) {\n            ARTEN.forEach(function (art) {\n                option(el('bpm-rueck-note'), teiler + ':' + art, notenName(teiler) + ' \u00b7 ' + T['art_' + art], teiler === 8 && art === 'punktiert');\n            });\n        });\n    }<\/p>\n<p>    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.BPM = {\n        T: T, NOTEN: NOTEN, TAKTARTEN: TAKTARTEN, noteMs: noteMs, hz: hz, samples: samples, taktMs: taktMs, bpmAusMs: bpmAusMs,\n        tempoGueltig: tempoGueltig, tapHinzu: tapHinzu, tapAuswerten: tapAuswerten, zahl: zahl, ganz: ganz, dauerText: dauerText,\n        aktualisieren: aktualisieren, tap: tap, tapsZuruecksetzen: tapsZuruecksetzen, taps: taps\n    };<\/p>\n<p>    if (!el('bpm-wurzel') || !el('bpm-noten')) { return; }\n    listenFuellen();\n    ['bpm-tempo', 'bpm-takte', 'bpm-rueck-ms'].forEach(function (id) { el(id).addEventListener('input', aktualisieren); });\n    ['bpm-rate', 'bpm-predelay', 'bpm-taktart', 'bpm-rueck-note'].forEach(function (id) { el(id).addEventListener('change', aktualisieren); });\n    var knopf = el('bpm-tap');\n    function tapKnopf(ev) {\n        if (ev) { ev.preventDefault(); }\n        tap(window.performance ? performance.now() : Date.now());\n        knopf.classList.add('bpm-blink');\n        setTimeout(function () { knopf.classList.remove('bpm-blink'); }, 90);\n    }\n    knopf.addEventListener('pointerdown', tapKnopf);\n    knopf.addEventListener('keydown', function (ev) { if (ev.key === 'Enter' || ev.key === ' ') { tapKnopf(ev); } });\n    el('bpm-neu').addEventListener('click', tapsZuruecksetzen);\n    document.addEventListener('keydown', function (ev) {\n        if (ev.key !== 't' && ev.key !== 'T') { return; }\n        if (ev.ctrlKey || ev.metaKey || ev.altKey) { return; }\n        var ziel = ev.target, tag = ziel && ziel.tagName;\n        if (tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA' || (ziel && ziel.isContentEditable)) { return; }\n        tapKnopf(ev);\n    });\n    aktualisieren();\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Converts a typed or tapped tempo into note lengths in milliseconds, hertz and samples for straight, dotted and triplet notes, splits a note length into reverb pre-delay and decay and turns bars into a duration.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92901],"class_list":["post-18765","page","type-page","status-publish","hentry","tag-music-production"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Converts a typed or tapped tempo into note lengths in milliseconds, hertz and samples for straight, dotted and triplet notes, splits a note length into reverb pre-delay and decay and turns bars into a duration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/bpm-delay-time-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/bpm-delay-time-calculator\\\/\",\"name\":\"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-17T09:24:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/bpm-delay-time-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/bpm-delay-time-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/bpm-delay-time-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/","og_locale":"en_US","og_type":"article","og_title":"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations - Lukas Wojcik - Blog","og_description":"Converts a typed or tapped tempo into note lengths in milliseconds, hertz and samples for straight, dotted and triplet notes, splits a note length into reverb pre-delay and decay and turns bars into a duration.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/","name":"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-17T09:24:03+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/bpm-delay-time-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"BPM to Delay Time Calculator: tap tempo, note lengths in ms and Hz, reverb pre-delay and bar durations"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/18765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=18765"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/18765\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=18765"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=18765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}