{"id":1373,"date":"2025-08-08T17:21:08","date_gmt":"2025-08-08T17:21:08","guid":{"rendered":"https:\/\/makingmusic4ever.com\/?page_id=1373"},"modified":"2025-08-08T17:57:39","modified_gmt":"2025-08-08T17:57:39","slug":"metronome","status":"publish","type":"page","link":"https:\/\/makingmusic4ever.com\/index.php\/metronome\/","title":{"rendered":"Metronome"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Interactive Metronome<\/title>\n    <!-- Tailwind CSS for styling -->\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <!-- Tone.js for audio synthesis -->\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/tone\/14.7.77\/Tone.js\"><\/script>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;700&#038;display=swap\" rel=\"stylesheet\">\n    <style>\n        \/* Custom styles for the metronome *\/\n        body {\n            font-family: 'Inter', sans-serif;\n            -webkit-font-smoothing: antialiased;\n            -moz-osx-font-smoothing: grayscale;\n            margin: 0; \/* Ensure no default margin *\/\n        }\n        \/* Prevents text selection during drag operations *\/\n        .no-select {\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -khtml-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n        }\n        \/* Style for the rotary dial *\/\n        #dial {\n            touch-action: none; \/* Disables browser gestures like pull-to-refresh on the dial *\/\n        }\n        \/* Visual indicator for beats *\/\n        #beat-indicator {\n            transition: background-color 0.05s ease-in-out;\n        }\n    <\/style>\n<\/head>\n<body data-rsssl=1 class=\"bg-gray-100 flex items-center justify-center min-h-screen no-select\">\n    <!-- \n      To embed this in WordPress:\n      1. Go to your WordPress editor.\n      2. Add a \"Custom HTML\" block.\n      3. Copy and paste all the code from this file into that block.\n      4. Save or update your page.\n    -->\n    <div class=\"w-full max-w-sm bg-white rounded-2xl shadow-lg p-6 md:p-8 space-y-6 mx-auto\">\n        <div class=\"text-center\">\n            <h2 class=\"text-2xl font-bold text-gray-800\">Metronome<\/h2>\n            <div id=\"beat-indicator\" class=\"w-4 h-4 rounded-full bg-gray-300 mx-auto mt-2\"><\/div>\n        <\/div>\n        \n        <!-- BPM Display and Dial -->\n        <div class=\"relative flex flex-col items-center justify-center space-y-4\">\n            <!-- Rotary Dial -->\n            <div id=\"dial-container\" class=\"relative w-56 h-56 flex items-center justify-center\">\n                <div class=\"absolute w-full h-full bg-gray-100 rounded-full border-8 border-gray-200\"><\/div>\n                <div id=\"dial\" class=\"relative w-52 h-52 bg-white rounded-full shadow-inner cursor-pointer flex items-center justify-center\">\n                     <!-- Dial Handle -->\n                    <div id=\"dial-handle\" class=\"absolute top-2 w-4 h-4 bg-blue-500 rounded-full\" style=\"transform: rotate(0deg) translateY(-22px) rotate(0deg); transform-origin: 50% 104px;\"><\/div>\n                    <!-- BPM Text -->\n                    <div class=\"text-center\">\n                        <span id=\"bpm-display\" class=\"text-6xl font-bold text-gray-800\">120<\/span>\n                        <span class=\"block text-sm text-gray-500 -mt-1\">BPM<\/span>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Tap Tempo Button -->\n            <button id=\"tap-tempo\" class=\"w-full bg-gray-200 hover:bg-gray-300 text-gray-700 font-semibold py-3 px-4 rounded-lg transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-blue-400\">\n                Tap Tempo\n            <\/button>\n        <\/div>\n\n        <!-- Controls: Time Signature, Subdivision, Start\/Stop -->\n        <div class=\"space-y-4\">\n            <!-- Time Signature and Subdivision -->\n            <div class=\"grid grid-cols-2 gap-4\">\n                <div>\n                    <label for=\"time-signature\" class=\"block text-sm font-medium text-gray-600 mb-1\">Time Signature<\/label>\n                    <select id=\"time-signature\" class=\"w-full bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block p-2.5\">\n                        <option value=\"4\/4\" selected>4\/4<\/option>\n                        <option value=\"3\/4\">3\/4<\/option>\n                        <option value=\"2\/4\">2\/4<\/option>\n                        <option value=\"6\/8\">6\/8<\/option>\n                        <option value=\"5\/4\">5\/4<\/option>\n                        <option value=\"7\/8\">7\/8<\/option>\n                    <\/select>\n                <\/div>\n                <div>\n                    <label for=\"subdivision\" class=\"block text-sm font-medium text-gray-600 mb-1\">Subdivision<\/label>\n                    <select id=\"subdivision\" class=\"w-full bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block p-2.5\">\n                        <option value=\"1\" selected>Quarter (\u2669)<\/option>\n                        <option value=\"2\">Eighth (\u266a)<\/option>\n                        <option value=\"4\">Sixteenth (\u266c)<\/option>\n                        <option value=\"3\">Triplet (\u2669\u00b3)<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n\n            <!-- Start\/Stop Button -->\n            <button id=\"start-stop\" class=\"w-full text-white font-bold py-3 px-4 rounded-lg transition-all duration-200 text-lg bg-blue-500 hover:bg-blue-600\">\n                Start\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', () => {\n            \/\/ --- DOM ELEMENTS ---\n            const bpmDisplay = document.getElementById('bpm-display');\n            const startStopButton = document.getElementById('start-stop');\n            const dial = document.getElementById('dial');\n            const dialHandle = document.getElementById('dial-handle');\n            const tapTempoButton = document.getElementById('tap-tempo');\n            const timeSignatureSelect = document.getElementById('time-signature');\n            const subdivisionSelect = document.getElementById('subdivision');\n            const beatIndicator = document.getElementById('beat-indicator');\n\n            \/\/ --- METRONOME STATE ---\n            let bpm = 120;\n            let isPlaying = false;\n            let timeSignature = [4, 4];\n            let subdivision = 1;\n            let currentBeat = 0;\n            let scheduledEventId = null;\n\n            \/\/ --- AUDIO SETUP (Tone.js) ---\n            let synthsInitialized = false;\n            let downbeatSynth, beatSynth;\n\n            \/\/ Initialize audio context on first user interaction\n            function initializeAudio() {\n                if (synthsInitialized) return;\n                Tone.start(); \/\/ Required to start audio context in browsers\n                \/\/ Sound for the first beat of the measure\n                downbeatSynth = new Tone.MembraneSynth({\n                    pitchDecay: 0.01,\n                    octaves: 6,\n                    oscillator: { type: 'sine' },\n                    envelope: { attack: 0.001, decay: 0.2, sustain: 0.01, release: 0.1 }\n                }).toDestination();\n\n                \/\/ Sound for the other beats\n                beatSynth = new Tone.MembraneSynth({\n                    pitchDecay: 0.01,\n                    octaves: 4,\n                    oscillator: { type: 'sine' },\n                    envelope: { attack: 0.001, decay: 0.15, sustain: 0.01, release: 0.1 }\n                }).toDestination();\n                synthsInitialized = true;\n            }\n\n            \/\/ --- CORE METRONOME LOGIC ---\n            function startMetronome() {\n                if (isPlaying) return;\n                initializeAudio();\n                \n                isPlaying = true;\n                currentBeat = 0;\n                \n                Tone.Transport.bpm.value = bpm;\n                \n                const subdivisionTime = { '1': '4n', '2': '8n', '3': '8t', '4': '16n' }[subdivision];\n\n                scheduledEventId = Tone.Transport.scheduleRepeat(time => {\n                    Tone.Draw.schedule(() => {\n                        \/\/ This ensures visual updates are synced with audio\n                        updateIndicator(currentBeat);\n                    }, time);\n\n                    if (currentBeat % timeSignature[0] === 0) {\n                        downbeatSynth.triggerAttackRelease('C2', '8n', time); \/\/ Downbeat\n                    } else {\n                        beatSynth.triggerAttackRelease('C3', '8n', time); \/\/ Other beats\n                    }\n                    currentBeat = (currentBeat + 1) % timeSignature[0];\n\n                }, subdivisionTime);\n\n                Tone.Transport.start();\n                startStopButton.textContent = 'Stop';\n                startStopButton.classList.remove('bg-blue-500', 'hover:bg-blue-600');\n                startStopButton.classList.add('bg-red-500', 'hover:bg-red-600');\n            }\n\n            function stopMetronome() {\n                if (!isPlaying) return;\n                isPlaying = false;\n                Tone.Transport.stop();\n                Tone.Transport.clear(scheduledEventId);\n                scheduledEventId = null;\n                currentBeat = 0;\n                updateIndicator(-1); \/\/ Reset indicator\n                startStopButton.textContent = 'Start';\n                startStopButton.classList.remove('bg-red-500', 'hover:bg-red-600');\n                startStopButton.classList.add('bg-blue-500', 'hover:bg-blue-600');\n            }\n            \n            function updateIndicator(beat) {\n                if (beat === -1) { \/\/ Reset state\n                    beatIndicator.style.backgroundColor = '#d1d5db'; \/\/ gray-300\n                } else if (beat === 0) {\n                    beatIndicator.style.backgroundColor = '#3b82f6'; \/\/ blue-500\n                } else {\n                    beatIndicator.style.backgroundColor = '#9ca3af'; \/\/ gray-400\n                }\n            }\n\n            \/\/ --- UI UPDATE FUNCTIONS ---\n            function updateBpm(newBpm) {\n                bpm = Math.round(Math.max(30, Math.min(300, newBpm))); \/\/ Clamp BPM between 30 and 300\n                bpmDisplay.textContent = bpm;\n                if (isPlaying) {\n                    Tone.Transport.bpm.value = bpm;\n                }\n                updateDial(bpm);\n            }\n\n            function updateDial(currentBpm) {\n                const minBpm = 30, maxBpm = 300;\n                \/\/ Map BPM to a rotation angle (0 to 360 degrees)\n                const percentage = (currentBpm - minBpm) \/ (maxBpm - minBpm);\n                const angle = percentage * 340 - 170; \/\/ Map to a range of -170 to 170 degrees\n                dialHandle.style.transform = `rotate(${angle}deg) translateY(-88px)`;\n            }\n\n            \/\/ --- EVENT LISTENERS ---\n\n            \/\/ Start\/Stop Button\n            startStopButton.addEventListener('click', () => {\n                if (isPlaying) {\n                    stopMetronome();\n                } else {\n                    startMetronome();\n                }\n            });\n\n            \/\/ Time Signature Select\n            timeSignatureSelect.addEventListener('change', (e) => {\n                timeSignature = e.target.value.split('\/').map(Number);\n                if (isPlaying) {\n                    stopMetronome();\n                    startMetronome();\n                }\n            });\n\n            \/\/ Subdivision Select\n            subdivisionSelect.addEventListener('change', (e) => {\n                subdivision = e.target.value;\n                if (isPlaying) {\n                    stopMetronome();\n                    startMetronome();\n                }\n            });\n\n            \/\/ --- Rotary Dial Logic ---\n            let isDragging = false;\n            \n            function handleDialMove(e) {\n                if (!isDragging) return;\n                e.preventDefault();\n\n                const dialRect = dial.getBoundingClientRect();\n                const centerX = dialRect.left + dialRect.width \/ 2;\n                const centerY = dialRect.top + dialRect.height \/ 2;\n                \n                const clientX = e.touches ? e.touches[0].clientX : e.clientX;\n                const clientY = e.touches ? e.touches[0].clientY : e.clientY;\n\n                const angleRad = Math.atan2(clientY - centerY, clientX - centerX);\n                let angleDeg = angleRad * (180 \/ Math.PI) + 90; \/\/ Offset by 90 to make top the 0 point\n                if (angleDeg < 0) angleDeg += 360;\n\n                \/\/ Restrict to a ~340 degree arc for better control\n                if (angleDeg > 170 && angleDeg < 190) return;\n\n                const minBpm = 30, maxBpm = 300;\n                let percentage;\n\n                if (angleDeg >= 190) { \/\/ Left side\n                    percentage = (angleDeg - 190) \/ 170;\n                } else { \/\/ Right side\n                    percentage = (angleDeg + 170) \/ 340;\n                }\n                \n                const newBpm = percentage * (maxBpm - minBpm) + minBpm;\n                updateBpm(newBpm);\n            }\n\n            dial.addEventListener('mousedown', (e) => { isDragging = true; initializeAudio(); handleDialMove(e); });\n            dial.addEventListener('touchstart', (e) => { isDragging = true; initializeAudio(); handleDialMove(e); });\n            \n            window.addEventListener('mousemove', handleDialMove);\n            window.addEventListener('touchmove', handleDialMove, { passive: false });\n\n            window.addEventListener('mouseup', () => { isDragging = false; });\n            window.addEventListener('touchend', () => { isDragging = false; });\n\n            \/\/ --- Tap Tempo Logic ---\n            let tapTimes = [];\n            tapTempoButton.addEventListener('click', () => {\n                initializeAudio();\n                const now = performance.now();\n                tapTimes.push(now);\n\n                \/\/ Keep only the last 4 taps to calculate average\n                if (tapTimes.length > 4) {\n                    tapTimes.shift();\n                }\n\n                if (tapTimes.length > 1) {\n                    const intervals = [];\n                    for (let i = 1; i < tapTimes.length; i++) {\n                        intervals.push(tapTimes[i] - tapTimes[i - 1]);\n                    }\n                    const averageInterval = intervals.reduce((a, b) => a + b, 0) \/ intervals.length;\n                    const newBpm = 60000 \/ averageInterval;\n                    updateBpm(newBpm);\n                }\n                \n                \/\/ Visual feedback for tap\n                tapTempoButton.style.transform = 'scale(0.98)';\n                setTimeout(() => {\n                    tapTempoButton.style.transform = 'scale(1)';\n                }, 100);\n            });\n\n            \/\/ Initialize dial on load\n            updateDial(bpm);\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Interactive Metronome Metronome 120 BPM Tap Tempo Time Signature 4\/43\/42\/46\/85\/47\/8 Subdivision Quarter (\u2669)Eighth (\u266a)Sixteenth (\u266c)Triplet (\u2669\u00b3) Start<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1373","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Metronome - Making Music 4 Ever<\/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:\/\/makingmusic4ever.com\/index.php\/metronome\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Metronome - Making Music 4 Ever\" \/>\n<meta property=\"og:description\" content=\"Interactive Metronome Metronome 120 BPM Tap Tempo Time Signature 4\/43\/42\/46\/85\/47\/8 Subdivision Quarter (\u2669)Eighth (\u266a)Sixteenth (\u266c)Triplet (\u2669\u00b3) Start\" \/>\n<meta property=\"og:url\" content=\"https:\/\/makingmusic4ever.com\/index.php\/metronome\/\" \/>\n<meta property=\"og:site_name\" content=\"Making Music 4 Ever\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-08T17:57:39+00:00\" \/>\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:\\\/\\\/makingmusic4ever.com\\\/index.php\\\/metronome\\\/\",\"url\":\"https:\\\/\\\/makingmusic4ever.com\\\/index.php\\\/metronome\\\/\",\"name\":\"Metronome - Making Music 4 Ever\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/#website\"},\"datePublished\":\"2025-08-08T17:21:08+00:00\",\"dateModified\":\"2025-08-08T17:57:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/index.php\\\/metronome\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/makingmusic4ever.com\\\/index.php\\\/metronome\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/index.php\\\/metronome\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/makingmusic4ever.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Metronome\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/#website\",\"url\":\"https:\\\/\\\/makingmusic4ever.com\\\/\",\"name\":\"Making Music 4 Ever\",\"description\":\"Music for everyone\",\"publisher\":{\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/makingmusic4ever.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/#organization\",\"name\":\"Making Music 4 Ever\",\"url\":\"https:\\\/\\\/makingmusic4ever.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/makingmusic4ever.com\\\/wp-content\\\/uploads\\\/2019\\\/04\\\/cropped-MakinMusicLogo.aiRed_-2.jpg?fit=248%2C248&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/makingmusic4ever.com\\\/wp-content\\\/uploads\\\/2019\\\/04\\\/cropped-MakinMusicLogo.aiRed_-2.jpg?fit=248%2C248&ssl=1\",\"width\":248,\"height\":248,\"caption\":\"Making Music 4 Ever\"},\"image\":{\"@id\":\"https:\\\/\\\/makingmusic4ever.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Metronome - Making Music 4 Ever","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:\/\/makingmusic4ever.com\/index.php\/metronome\/","og_locale":"en_US","og_type":"article","og_title":"Metronome - Making Music 4 Ever","og_description":"Interactive Metronome Metronome 120 BPM Tap Tempo Time Signature 4\/43\/42\/46\/85\/47\/8 Subdivision Quarter (\u2669)Eighth (\u266a)Sixteenth (\u266c)Triplet (\u2669\u00b3) Start","og_url":"https:\/\/makingmusic4ever.com\/index.php\/metronome\/","og_site_name":"Making Music 4 Ever","article_modified_time":"2025-08-08T17:57:39+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/makingmusic4ever.com\/index.php\/metronome\/","url":"https:\/\/makingmusic4ever.com\/index.php\/metronome\/","name":"Metronome - Making Music 4 Ever","isPartOf":{"@id":"https:\/\/makingmusic4ever.com\/#website"},"datePublished":"2025-08-08T17:21:08+00:00","dateModified":"2025-08-08T17:57:39+00:00","breadcrumb":{"@id":"https:\/\/makingmusic4ever.com\/index.php\/metronome\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/makingmusic4ever.com\/index.php\/metronome\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/makingmusic4ever.com\/index.php\/metronome\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/makingmusic4ever.com\/"},{"@type":"ListItem","position":2,"name":"Metronome"}]},{"@type":"WebSite","@id":"https:\/\/makingmusic4ever.com\/#website","url":"https:\/\/makingmusic4ever.com\/","name":"Making Music 4 Ever","description":"Music for everyone","publisher":{"@id":"https:\/\/makingmusic4ever.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/makingmusic4ever.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/makingmusic4ever.com\/#organization","name":"Making Music 4 Ever","url":"https:\/\/makingmusic4ever.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/makingmusic4ever.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2019\/04\/cropped-MakinMusicLogo.aiRed_-2.jpg?fit=248%2C248&ssl=1","contentUrl":"https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2019\/04\/cropped-MakinMusicLogo.aiRed_-2.jpg?fit=248%2C248&ssl=1","width":248,"height":248,"caption":"Making Music 4 Ever"},"image":{"@id":"https:\/\/makingmusic4ever.com\/#\/schema\/logo\/image\/"}}]}},"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PamHgp-m9","jetpack-related-posts":[{"id":1383,"url":"https:\/\/makingmusic4ever.com\/index.php\/guitar-tuner-2\/","url_meta":{"origin":1373,"position":0},"title":"Guitar Tuner","author":"editor","date":"August 8, 2025","format":false,"excerpt":"Guitar Tuner Guitar Tuner Click \"Start Tuner\" to begin -- Waiting... Detected Frequency 0.0 Hz Start Tuner Standard Tuning (EADGBe)","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1369,"url":"https:\/\/makingmusic4ever.com\/index.php\/guitar-tuner\/","url_meta":{"origin":1373,"position":1},"title":"Guitar Tuner","author":"editor","date":"August 8, 2025","format":false,"excerpt":"Guitar Tuner \ud83c\udfb8 Auto-detect string Low E (82.41 Hz) A (110 Hz) D (146.83 Hz) G (196 Hz) B (246.94 Hz) High E (329.63 Hz) Start Stop \u2014 Hz Idle","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1387,"url":"https:\/\/makingmusic4ever.com\/index.php\/sheet-music\/","url_meta":{"origin":1373,"position":2},"title":"Sheet Music","author":"editor","date":"August 11, 2025","format":false,"excerpt":"Find sheet music with arrangements for various instruments. Search by composition and then check the available arrangements for several instruments, then click the respective instrument button. Search your Song Arrangement In-Page Search Search in this page: Press Enter to find next. All my Loving (Beatles) cLARINET & Guitar Violin &\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"studio with musica instruments and sheet music","src":"https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2026\/06\/Musical_instruments_on_table_202606090832.jpeg?fit=1200%2C670&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2026\/06\/Musical_instruments_on_table_202606090832.jpeg?fit=1200%2C670&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2026\/06\/Musical_instruments_on_table_202606090832.jpeg?fit=1200%2C670&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2026\/06\/Musical_instruments_on_table_202606090832.jpeg?fit=1200%2C670&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/makingmusic4ever.com\/wp-content\/uploads\/2026\/06\/Musical_instruments_on_table_202606090832.jpeg?fit=1200%2C670&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1509,"url":"https:\/\/makingmusic4ever.com\/index.php\/chord-finder\/","url_meta":{"origin":1373,"position":3},"title":"Chord Finder","author":"editor","date":"August 26, 2025","format":false,"excerpt":"Piano Chords Piano Chord Visualizer Chord Visualizer Enter a chord (e.g., C, gm7, CM7, F4(6), A\/c#) and see it on the piano. Draw Chord Color Legend","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/pages\/1373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/comments?post=1373"}],"version-history":[{"count":6,"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/pages\/1373\/revisions"}],"predecessor-version":[{"id":1380,"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/pages\/1373\/revisions\/1380"}],"wp:attachment":[{"href":"https:\/\/makingmusic4ever.com\/index.php\/wp-json\/wp\/v2\/media?parent=1373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}