{"id":18767,"date":"2026-09-17T11:24:10","date_gmt":"2026-09-17T09:24:10","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/narzedzia\/bpm-delay-time-calculator\/"},"modified":"2026-09-17T11:24:10","modified_gmt":"2026-09-17T09:24:10","slug":"bpm-delay-time-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/bpm-delay-time-calculator\/","title":{"rendered":"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w"},"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;\">Czasy op\u00f3\u017anienia, cz\u0119stotliwo\u015bci LFO, release kompresora i ogony pog\u0142osu lepiej trzymaj\u0105 si\u0119 miksu, gdy pod\u0105\u017caj\u0105 za tempem. Kalkulator przelicza tempo na d\u0142ugo\u015bci nut w milisekundach, hercach i pr\u00f3bkach, dzieli d\u0142ugo\u015b\u0107 nuty na pre-delay i wybrzmienie pog\u0142osu, zamienia liczb\u0119 takt\u00f3w na czas trwania i wyznacza tempo z czasu op\u00f3\u017anienia.<\/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\">Zerowanie tap\u00f3w<\/button><br \/>\n        <label class=\"bpm-feld\">Cz\u0119stotliwo\u015b\u0107 pr\u00f3bkowania <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: klawisz T lub przycisk kilka razy w rytmie; przerwa d\u0142u\u017csza ni\u017c dwie sekundy rozpoczyna nowy pomiar.<\/p>\n<div class=\"bpm-h\">D\u0142ugo\u015bci nut<\/div>\n<div class=\"bpm-tabelle\">\n<table>\n<thead>\n<tr>\n<th>Nuta<\/th>\n<th>Prosta (ms)<\/th>\n<th>Z kropk\u0105 (ms)<\/th>\n<th>Triola (ms)<\/th>\n<th>Prosta (Hz)<\/th>\n<th>Prosta (pr\u00f3bki)<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"bpm-noten\"><\/tbody>\n<\/table><\/div>\n<p class=\"bpm-klein\" style=\"margin: 8px 0 0;\">Nuty z kropk\u0105 trwaj\u0105 1,5 raza d\u0142u\u017cej ni\u017c prosta warto\u015b\u0107, triole dwie trzecie tej warto\u015bci. Hz to cz\u0119stotliwo\u015b\u0107 cyklu o tej d\u0142ugo\u015bci, np. dla LFO.<\/p>\n<div class=\"bpm-h\">Pog\u0142os ko\u0144cz\u0105cy si\u0119 w siatce rytmicznej<\/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>Pog\u0142os ko\u0144czy si\u0119 po<\/th>\n<th>D\u0142ugo\u015b\u0107 (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 i decay razem daj\u0105 wybran\u0105 d\u0142ugo\u015b\u0107, wi\u0119c ogon pog\u0142osu ko\u0144czy si\u0119 przed kolejn\u0105 nut\u0105 tej warto\u015bci. Wtyczki r\u00f3\u017cnie mierz\u0105 decay (RT60 albo do ciszy), dlatego warto\u015b\u0107 jest punktem wyj\u015bcia.<\/p>\n<div class=\"bpm-h\">Takty na czas trwania<\/div>\n<div class=\"bpm-reihe\">\n        <label class=\"bpm-feld\">Liczba takt\u00f3w <input id=\"bpm-takte\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"8\" style=\"width: 110px;\"><\/label><br \/>\n        <label class=\"bpm-feld\">Metrum <select id=\"bpm-taktart\"><\/select><\/label>\n    <\/div>\n<p id=\"bpm-dauer\" class=\"bpm-ergebnis\" aria-live=\"polite\">\n<div class=\"bpm-h\">Od czasu op\u00f3\u017anienia do tempa<\/div>\n<div class=\"bpm-reihe\">\n        <label class=\"bpm-feld\">Czas op\u00f3\u017anienia (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\">Odpowiada <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\">Spos\u00f3b obliczania<\/div>\n<p class=\"bpm-klein\" style=\"margin: 0 0 6px;\">\u0106wier\u0107nuta trwa 60 000 \u00f7 BPM milisekund, przy 120 BPM wi\u0119c 500 ms. Pozosta\u0142e proste warto\u015bci nut wynikaj\u0105 z podwajania lub dzielenia na p\u00f3\u0142.<\/p>\n<p class=\"bpm-klein\" style=\"margin: 0 0 6px;\">Z kropk\u0105 = prosta \u00d7 1,5, triola = prosta \u00d7 2\/3, cz\u0119stotliwo\u015b\u0107 w Hz = 1000 \u00f7 d\u0142ugo\u015b\u0107 w ms, pr\u00f3bki = d\u0142ugo\u015b\u0107 w ms \u00d7 cz\u0119stotliwo\u015b\u0107 pr\u00f3bkowania \u00f7 1000.<\/p>\n<p class=\"bpm-klein\" style=\"margin: 0 0 6px;\">Takt trwa licznik \u00d7 4 \u00f7 mianownik \u0107wier\u0107nut; takt 6\/8 odpowiada wi\u0119c trzem \u0107wier\u0107nutom.<\/p>\n<p class=\"bpm-klein\" style=\"font-size: 0.8rem; margin: 14px 0 0;\">Wszystkie obliczenia odbywaj\u0105 si\u0119 w przegl\u0105darce. DAW-y i wtyczki czasem zaokr\u0105glaj\u0105 czasy op\u00f3\u017anienia lub pokazuj\u0105 je jako warto\u015bci nut; tabele podaj\u0105 warto\u015bci dok\u0142adne.<\/p>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Czasy op\u00f3\u017anienia, cz\u0119stotliwo\u015bci LFO, release kompresora i ogony pog\u0142osu lepiej trzymaj\u0105 si\u0119 miksu, gdy pod\u0105\u017caj\u0105 za tempem. Kalkulator przelicza tempo na d\u0142ugo\u015bci nut w milisekundach, hercach i pr\u00f3bkach, dzieli d\u0142ugo\u015b\u0107 nuty na pre-delay i wybrzmienie pog\u0142osu, zamienia liczb\u0119 takt\u00f3w na czas trwania i wyznacza tempo z czasu op\u00f3\u017anienia.\",\"tempo\":\"Tempo (BPM)\",\"knopf_tap\":\"Tap\",\"knopf_neu\":\"Zerowanie tap\u00f3w\",\"abtastrate\":\"Cz\u0119stotliwo\u015b\u0107 pr\u00f3bkowania\",\"tap_hinweis\":\"Tap tempo: klawisz T lub przycisk kilka razy w rytmie; przerwa d\u0142u\u017csza ni\u017c dwie sekundy rozpoczyna nowy pomiar.\",\"tap_status\":\"Liczba uderze\u0144: {taps} \u00b7 \u015bredni odst\u0119p {intervall} ms \u00b7 najwi\u0119ksze odchylenie {abweichung} ms\",\"tap_zu_wenig\":\"Do wyznaczenia tempa potrzebne jest jeszcze jedno uderzenie.\",\"fehler_tempo\":\"Tempo musi mie\u015bci\u0107 si\u0119 w zakresie od 20 do 400 BPM.\",\"fehler_takte\":\"Liczba takt\u00f3w musi wynosi\u0107 co najmniej 1.\",\"fehler_ms\":\"Czas op\u00f3\u017anienia musi by\u0107 wi\u0119kszy ni\u017c 0 ms.\",\"h_noten\":\"D\u0142ugo\u015bci nut\",\"sp_note\":\"Nuta\",\"sp_gerade\":\"Prosta (ms)\",\"sp_punktiert\":\"Z kropk\u0105 (ms)\",\"sp_triole\":\"Triola (ms)\",\"sp_hz\":\"Prosta (Hz)\",\"sp_samples\":\"Prosta (pr\u00f3bki)\",\"noten_hinweis\":\"Nuty z kropk\u0105 trwaj\u0105 1,5 raza d\u0142u\u017cej ni\u017c prosta warto\u015b\u0107, triole dwie trzecie tej warto\u015bci. Hz to cz\u0119stotliwo\u015b\u0107 cyklu o tej d\u0142ugo\u015bci, np. dla LFO.\",\"note_1\":\"1\\\/1 ca\u0142a nuta\",\"note_2\":\"1\\\/2 p\u00f3\u0142nuta\",\"note_4\":\"1\\\/4 \u0107wier\u0107nuta\",\"note_8\":\"1\\\/8 \u00f3semka\",\"note_16\":\"1\\\/16 szesnastka\",\"note_32\":\"1\\\/32 trzydziestodw\u00f3jka\",\"note_64\":\"1\\\/64 sze\u015b\u0107dziesi\u0119cioczw\u00f3rka\",\"art_gerade\":\"prosta\",\"art_punktiert\":\"z kropk\u0105\",\"art_triole\":\"triola\",\"h_hall\":\"Pog\u0142os ko\u0144cz\u0105cy si\u0119 w siatce rytmicznej\",\"predelay_als\":\"Pre-delay\",\"predelay_0\":\"brak (0 ms)\",\"pd_128\":\"nuta 1\\\/128\",\"pd_64\":\"nuta 1\\\/64\",\"pd_32\":\"nuta 1\\\/32\",\"sp_hall_bis\":\"Pog\u0142os ko\u0144czy si\u0119 po\",\"sp_laenge\":\"D\u0142ugo\u015b\u0107 (ms)\",\"sp_predelay\":\"Pre-delay (ms)\",\"sp_decay\":\"Decay (ms)\",\"hall_viertel\":\"\u0107wier\u0107nuta\",\"hall_halbe\":\"p\u00f3\u0142nuta\",\"hall_takt\":\"1 takt (4\\\/4)\",\"hall_zwei_takte\":\"2 takty (4\\\/4)\",\"hall_hinweis\":\"Pre-delay i decay razem daj\u0105 wybran\u0105 d\u0142ugo\u015b\u0107, wi\u0119c ogon pog\u0142osu ko\u0144czy si\u0119 przed kolejn\u0105 nut\u0105 tej warto\u015bci. Wtyczki r\u00f3\u017cnie mierz\u0105 decay (RT60 albo do ciszy), dlatego warto\u015b\u0107 jest punktem wyj\u015bcia.\",\"h_takte\":\"Takty na czas trwania\",\"takte\":\"Liczba takt\u00f3w\",\"taktart\":\"Metrum\",\"dauer_satz\":\"{dauer} \u00b7 {sekunden} s \u00b7 {samples} pr\u00f3bek przy {rate}\",\"h_rueck\":\"Od czasu op\u00f3\u017anienia do tempa\",\"rueck_ms\":\"Czas op\u00f3\u017anienia (ms)\",\"rueck_note\":\"Odpowiada\",\"rueck_satz\":\"{bpm} BPM\",\"h_formeln\":\"Spos\u00f3b obliczania\",\"formel_1\":\"\u0106wier\u0107nuta trwa 60 000 \u00f7 BPM milisekund, przy 120 BPM wi\u0119c 500 ms. Pozosta\u0142e proste warto\u015bci nut wynikaj\u0105 z podwajania lub dzielenia na p\u00f3\u0142.\",\"formel_2\":\"Z kropk\u0105 = prosta \u00d7 1,5, triola = prosta \u00d7 2\\\/3, cz\u0119stotliwo\u015b\u0107 w Hz = 1000 \u00f7 d\u0142ugo\u015b\u0107 w ms, pr\u00f3bki = d\u0142ugo\u015b\u0107 w ms \u00d7 cz\u0119stotliwo\u015b\u0107 pr\u00f3bkowania \u00f7 1000.\",\"formel_3\":\"Takt trwa licznik \u00d7 4 \u00f7 mianownik \u0107wier\u0107nut; takt 6\\\/8 odpowiada wi\u0119c trzem \u0107wier\u0107nutom.\",\"grenze\":\"Wszystkie obliczenia odbywaj\u0105 si\u0119 w przegl\u0105darce. DAW-y i wtyczki czasem zaokr\u0105glaj\u0105 czasy op\u00f3\u017anienia lub pokazuj\u0105 je jako warto\u015bci nut; tabele podaj\u0105 warto\u015bci dok\u0142adne.\",\"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>Przelicza tempo wpisane lub wystukane na d\u0142ugo\u015bci nut w milisekundach, hercach i pr\u00f3bkach dla nut prostych, z kropk\u0105 i triol, dzieli d\u0142ugo\u015b\u0107 nuty na pre-delay i decay pog\u0142osu oraz zamienia takty na czas trwania.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92906],"class_list":["post-18767","page","type-page","status-publish","hentry","tag-music-production-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w - 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\/pl\/narzedzia\/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=\"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Przelicza tempo wpisane lub wystukane na d\u0142ugo\u015bci nut w milisekundach, hercach i pr\u00f3bkach dla nut prostych, z kropk\u0105 i triol, dzieli d\u0142ugo\u015b\u0107 nuty na pre-delay i decay pog\u0142osu oraz zamienia takty na czas trwania.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/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=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/bpm-delay-time-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/bpm-delay-time-calculator\\\/\",\"name\":\"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-17T09:24:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/bpm-delay-time-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/bpm-delay-time-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/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\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w\"}]},{\"@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":"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w - 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\/pl\/narzedzia\/bpm-delay-time-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w - Lukas Wojcik - Blog","og_description":"Przelicza tempo wpisane lub wystukane na d\u0142ugo\u015bci nut w milisekundach, hercach i pr\u00f3bkach dla nut prostych, z kropk\u0105 i triol, dzieli d\u0142ugo\u015b\u0107 nuty na pre-delay i decay pog\u0142osu oraz zamienia takty na czas trwania.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/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":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/bpm-delay-time-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/bpm-delay-time-calculator\/","name":"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-09-17T09:24:10+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/bpm-delay-time-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/bpm-delay-time-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/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\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Kalkulator BPM i czasu op\u00f3\u017anienia: tap tempo, d\u0142ugo\u015bci nut w ms i Hz, pre-delay pog\u0142osu i d\u0142ugo\u015b\u0107 takt\u00f3w"}]},{"@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\/18767","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=18767"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/18767\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=18767"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=18767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}