{"id":2819,"date":"2024-09-19T13:08:47","date_gmt":"2024-09-19T07:23:47","guid":{"rendered":"https:\/\/eternalscoring.studio\/?page_id=2819"},"modified":"2024-12-21T11:10:02","modified_gmt":"2024-12-21T05:25:02","slug":"bpm-convert","status":"publish","type":"page","link":"https:\/\/eternalscoring.studio\/ne\/bpm-convert\/","title":{"rendered":"BPM \u0915\u0928\u094d\u092d\u0930\u094d\u091f\u0930"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"2819\" class=\"elementor elementor-2819\" data-elementor-post-type=\"page\">\n\t\t\t\t<div data-dce-background-overlay-image-url=\"https:\/\/eternalscoring.studio\/wp-content\/uploads\/2024\/01\/audio-2941753_1280.jpg\" class=\"elementor-element elementor-element-3caef23 e-flex e-con-boxed e-con e-parent\" data-id=\"3caef23\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9b3082a elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"9b3082a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"bpm-converter\">\r\n    <h2>\u091f\u0947\u092e\u094d\u092a\u094b\u092c\u093e\u091f \u092e\u093f\u0932\u093f\u0938\u0947\u0915\u0947\u0923\u094d\u0921 \/ \u092b\u094d\u0930\u093f\u0915\u094d\u0935\u0947\u0928\u094d\u0938\u0940<\/h2>\r\n    <br><br>\r\n    \r\n    <!-- BPM Input -->\r\n    <label for=\"bpmInput\">BPM \u0932\u0947\u0916\u094d\u0928\u0941\u0939\u094b\u0938\u094d<\/label>\r\n    <input type=\"number\" id=\"bpmInput\" min=\"20\" max=\"300\" value=\"120\">\r\n    \r\n    <br><br>\r\n    <!-- Toggle Button -->\r\n    <button id=\"toggleButton\">\u092b\u094d\u0930\u093f\u0915\u094d\u0935\u0947\u0928\u094d\u0938\u0940 \u0926\u0947\u0916\u093e\u0909<\/button>\r\n   \r\n    <!-- Round Up Checkbox -->\r\n    <label for=\"roundCheckbox\">\r\n        <input type=\"checkbox\" id=\"roundCheckbox\"> Round Up\r\n    <\/label>\r\n    <br><br>\r\n    \r\n    <!-- Table for regular, triplet, and dotted values -->\r\n    <table id=\"valuesTable\">\r\n        <thead>\r\n            <tr>\r\n                <th>Fraction<\/th>\r\n                <th>Regular (ms)<\/th>\r\n                <th>Triplet (ms)<\/th>\r\n                <th>Dotted (ms)<\/th>\r\n            <\/tr>\r\n        <\/thead>\r\n        <tbody id=\"valuesBody\">\r\n            <!-- Rows will be populated dynamically -->\r\n        <\/tbody>\r\n    <\/table>\r\n    \r\n    <!-- More Section -->\r\n    <div class=\"expandable-section\">\r\n        <button id=\"expandMore\">More<\/button>\r\n        <div id=\"moreValues\" style=\"display:none;\">\r\n            <table id=\"moreValuesTable\">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Fraction<\/th>\r\n                        <th>Regular (ms)<\/th>\r\n                        <th>Triplet (ms)<\/th>\r\n                        <th>Dotted (ms)<\/th>\r\n                    <\/tr>\r\n                <\/thead>\r\n                <tbody id=\"moreValuesBody\">\r\n                    <!-- More rows will be populated dynamically -->\r\n                <\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n    const bpmInput = document.getElementById('bpmInput');\r\n    const roundCheckbox = document.getElementById('roundCheckbox');\r\n    const toggleButton = document.getElementById('toggleButton');\r\n    const expandMore = document.getElementById('expandMore');\r\n    const moreValues = document.getElementById('moreValues');\r\n\r\n    let showFrequencies = false;\r\n\r\n    function calculateValues(bpm) {\r\n        const base = 60000 \/ bpm;\r\n        const regularValues = [\r\n            { fraction: 'Whole', ms: base * 4 },\r\n            { fraction: 'Half', ms: base * 2 },\r\n            { fraction: 'Quarter', ms: base },\r\n            { fraction: '1\/8', ms: base \/ 2 },\r\n            { fraction: '1\/16', ms: base \/ 4 },\r\n            { fraction: '1\/32', ms: base \/ 8 },\r\n            { fraction: '1\/64', ms: base \/ 16 }\r\n        ];\r\n\r\n        const tripletValues = regularValues.map(value => ({\r\n            ...value,\r\n            ms: value.ms * 2 \/ 3,\r\n        }));\r\n\r\n        const dottedValues = regularValues.map(value => ({\r\n            ...value,\r\n            ms: value.ms * 1.5,\r\n        }));\r\n\r\n        return { regularValues, tripletValues, dottedValues };\r\n    }\r\n\r\n    function updateDisplay() {\r\n        const bpm = parseFloat(bpmInput.value);\r\n        let { regularValues, tripletValues, dottedValues } = calculateValues(bpm);\r\n\r\n        \/\/ Determine rounding function based on the checkbox\r\n        const roundingFunction = roundCheckbox.checked ? (x) => Math.round(x) : (x) => x;\r\n\r\n        \/\/ Apply rounding to milliseconds if showing frequencies\r\n        const formattedValues = {\r\n            regular: regularValues.map(v => ({ ...v, ms: roundingFunction(v.ms) })),\r\n            triplets: tripletValues.map(v => ({ ...v, ms: roundingFunction(v.ms) })),\r\n            dotted: dottedValues.map(v => ({ ...v, ms: roundingFunction(v.ms) }))\r\n        };\r\n\r\n        \/\/ Formatting function\r\n        const valueFormatter = showFrequencies ?\r\n            (ms) => (roundingFunction(1000 \/ ms)).toFixed(2) + ' Hz' :\r\n            (ms) => roundingFunction(ms).toFixed(2) + ' ms';\r\n\r\n        displayValues(formattedValues.regular.slice(0, 5), formattedValues.triplets.slice(0, 5), formattedValues.dotted.slice(0, 5), valueFormatter);\r\n        \r\n        \/\/ Call displayMoreValues with valid data\r\n        displayMoreValues(\r\n            formattedValues.regular.filter(v => v.fraction === '1\/32' || v.fraction === '1\/64'), \r\n            formattedValues.triplets.filter(v => v.fraction === '1\/32' || v.fraction === '1\/64'), \r\n            formattedValues.dotted.filter(v => v.fraction === '1\/32' || v.fraction === '1\/64'), \r\n            valueFormatter\r\n        );\r\n    }\r\n\r\n    function displayValues(regular, triplets, dotted, formatter) {\r\n        const tableBody = document.getElementById('valuesBody');\r\n        tableBody.innerHTML = ''; \/\/ Clear previous table rows\r\n\r\n        \/\/ Assuming all arrays have the same length\r\n        for (let i = 0; i < regular.length; i++) {\r\n            const row = `\r\n                <tr>\r\n                    <td>${regular[i].fraction}<\/td>\r\n                    <td>${formatter(regular[i].ms)}<\/td>\r\n                    <td>${formatter(triplets[i].ms)}<\/td>\r\n                    <td>${formatter(dotted[i].ms)}<\/td>\r\n                <\/tr>\r\n            `;\r\n            tableBody.innerHTML += row;\r\n        }\r\n    }\r\n\r\n    function displayMoreValues(regular, triplets, dotted, formatter) {\r\n        const moreTableBody = document.getElementById('moreValuesBody');\r\n        moreTableBody.innerHTML = ''; \/\/ Clear previous table rows\r\n\r\n        for (let i = 0; i < regular.length; i++) {\r\n            const row = `\r\n                <tr>\r\n                    <td>${regular[i].fraction}<\/td>\r\n                    <td>${formatter(regular[i].ms)}<\/td>\r\n                    <td>${formatter(triplets[i].ms)}<\/td>\r\n                    <td>${formatter(dotted[i].ms)}<\/td>\r\n                <\/tr>\r\n            `;\r\n            moreTableBody.innerHTML += row;\r\n        }\r\n    }\r\n\r\n    \/\/ Toggle between milliseconds and frequencies\r\n    toggleButton.addEventListener('click', function() {\r\n        showFrequencies = !showFrequencies;\r\n        toggleButton.textContent = showFrequencies ? 'Switch to Milliseconds' : 'Show Frequencies';\r\n        updateDisplay();\r\n    });\r\n\r\n    \/\/ Expand \"More\" section\r\n    expandMore.addEventListener('click', function() {\r\n        \/\/ Toggle visibility\r\n        moreValues.style.display = moreValues.style.display === 'none' ? 'block' : 'none';\r\n        \r\n        \/\/ Change button text accordingly\r\n        expandMore.textContent = moreValues.style.display === 'none' ? 'More' : 'Less';\r\n    });\r\n\r\n    \/\/ Initial load and updates\r\n    bpmInput.addEventListener('input', updateDisplay);\r\n    roundCheckbox.addEventListener('change', updateDisplay);\r\n    updateDisplay(); \/\/ Initial load\r\n});\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8145bc5 e-flex e-con-boxed e-con e-child\" data-id=\"8145bc5\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b2435a1 elementor-widget elementor-widget-text-editor\" data-id=\"b2435a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u092f\u094b \u0909\u092a\u0915\u0930\u0923\u0932\u0947 \u091f\u0947\u092e\u094d\u092a\u094b BPM \u0932\u093e\u0908 \u092e\u093f\u0932\u093f\u0938\u0947\u0915\u0947\u0928\u094d\u0921 \u0935\u093e \u092b\u094d\u0930\u093f\u0915\u094d\u0935\u0947\u0928\u094d\u0938\u0940\u092e\u093e \u0930\u0942\u092a\u093e\u0928\u094d\u0924\u0930\u0923 \u0917\u0930\u094d\u0926\u091b\u0964<\/p><p><strong><b>\u092e\u0932\u093e\u0908 \u092f\u094b \u0915\u093f\u0928 \u091a\u093e\u0939\u093f\u0928\u094d\u091b?<\/b><\/strong><\/p><p>For music producers and mixing engineers, precise synchronization is key. This converter helps you <strong>align effect plugins accurately to your beat<\/strong>, ensuring a tighter mix. <strong>Try using the values generated in this converter as your compressor release! <\/strong>This trick is excellent for side-chained compressors in EDM.<\/p><p><b>How to use?<\/b><\/p><ol><li>Type the tempo BPM into the converter.<\/li><li>You can convert BPM to frequencies by clicking on <strong>\u092b\u094d\u0930\u093f\u0915\u094d\u0935\u0947\u0928\u094d\u0938\u0940 \u0926\u0947\u0916\u093e\u0909<\/strong>.<\/li><li>Check <strong>Round Up<\/strong> if you don&#8217;t need decimal points.<\/li><li>Click on <strong>More<\/strong> to discover the 1\/32 and 1\/64 lengths!<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>BPM Converter by Eternal Scoring Studio to convert note divisions into milliseconds and frequency.<\/p>","protected":false},"author":1,"featured_media":2961,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-2819","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/pages\/2819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/comments?post=2819"}],"version-history":[{"count":0,"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/pages\/2819\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/media\/2961"}],"wp:attachment":[{"href":"https:\/\/eternalscoring.studio\/ne\/wp-json\/wp\/v2\/media?parent=2819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}