{"id":308,"date":"2026-06-26T08:04:25","date_gmt":"2026-06-26T08:04:25","guid":{"rendered":"https:\/\/theselfmadepeople.com\/?p=308"},"modified":"2026-06-26T08:04:26","modified_gmt":"2026-06-26T08:04:26","slug":"but-pha-ky-nang-nghe-hieu-bang-tool-tao-dictation-cho-doan-van-hoc-tu-vung","status":"publish","type":"post","link":"https:\/\/theselfmadepeople.com\/?p=308","title":{"rendered":"B\u1ee9t Ph\u00e1 K\u1ef9 N\u0103ng Nghe Hi\u1ec3u B\u1eb1ng TOOL T\u1ea1o Dictation Cho \u0110o\u1ea1n V\u0103n H\u1ecdc T\u1eeb V\u1ef1ng"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ghi ch\u00e9p ch\u00ednh t\u1ea3 (Dictation) t\u1eeb l\u00e2u \u0111\u00e3 \u0111\u01b0\u1ee3c xem l\u00e0 m\u1ed9t trong nh\u1eefng ph\u01b0\u01a1ng ph\u00e1p kinh \u0111i\u1ec3n v\u00e0 hi\u1ec7u qu\u1ea3 nh\u1ea5t \u0111\u1ec3 n\u00e2ng cao k\u1ef9 n\u0103ng Listening. Tuy nhi\u00ean, n\u1ebfu bi\u1ebft c\u00e1ch <strong>t\u1ea1o dictation cho \u0111o\u1ea1n v\u0103n h\u1ecdc t\u1eeb v\u1ef1ng<\/strong>, b\u1ea1n kh\u00f4ng ch\u1ec9 r\u00e8n luy\u1ec7n \u0111\u01b0\u1ee3c \u0111\u00f4i tai nh\u1ea1y b\u00e9n m\u00e0 c\u00f2n c\u00f3 th\u1ec3 kh\u1eafc s\u00e2u h\u00e0ng lo\u1ea1t t\u1eeb v\u1ef1ng h\u1ecdc thu\u1eadt (Lexical Resource) v\u00e0o tr\u00ed nh\u1edb d\u00e0i h\u1ea1n. \u0110\u00e2y ch\u00ednh l\u00e0 b\u01b0\u1edbc \u0111\u1ec7m v\u1eefng ch\u1eafc \u0111\u1ec3 b\u1ea1n chinh ph\u1ee5c c\u00e1c k\u1ef9 n\u0103ng h\u00f3c b\u00faa h\u01a1n trong b\u00e0i thi IELTS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>T\u1ed1i \u01afu H\u00f3a Ph\u01b0\u01a1ng Ph\u00e1p Dictation C\u00f9ng T\u01b0 Duy F.A.Y<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thay v\u00ec luy\u1ec7n nghe m\u1ed9t c\u00e1ch th\u1ee5 \u0111\u1ed9ng, The Fulcrum Academy khuy\u1ebfn kh\u00edch h\u1ecdc vi\u00ean \u00e1p d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p n\u00e0y k\u1ebft h\u1ee3p v\u1edbi b\u1ed9 3 tr\u1ee5 c\u1ed9t t\u01b0 duy c\u1ed1t l\u00f5i, \u0111\u1eb7c bi\u1ec7t l\u00e0 F.A.Y (Find Answer Yourself).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Khi b\u1ea1n <strong>t\u1ea1o dictation cho \u0111o\u1ea1n v\u0103n h\u1ecdc t\u1eeb v\u1ef1ng<\/strong>, b\u1ea1n \u0111ang r\u00e8n luy\u1ec7n kh\u1ea3 n\u0103ng ch\u1ee7 \u0111\u1ed9ng t\u00ecm l\u1eddi gi\u1ea3i, ph\u00e1t tri\u1ec3n t\u01b0 duy \u0111\u1ed9c l\u1eadp v\u00e0 suy lu\u1eadn ng\u1eef c\u1ea3nh thay v\u00ec ph\u1ee5 thu\u1ed9c ho\u00e0n to\u00e0n v\u00e0o gi\u00e1o vi\u00ean hay t\u1eeb \u0111i\u1ec3n. Qu\u00e1 tr\u00ecnh nghe &#8211; ch\u00e9p &#8211; \u0111\u1ed1i chi\u1ebfu v\u00e0 t\u1ef1 ph\u00e2n t\u00edch l\u1ed7i sai gi\u00fap b\u1ea1n &#8220;c\u00e0i \u0111\u1eb7t&#8221; ti\u1ebfng Anh nh\u01b0 m\u1ed9t h\u1ec7 \u0111i\u1ec1u h\u00e0nh t\u1eeb b\u00ean trong (INSIDE OUT). S\u1ef1 k\u1ebft h\u1ee3p n\u00e0y mang l\u1ea1i hi\u1ec7u qu\u1ea3 v\u01b0\u1ee3t tr\u1ed9i: v\u1eeba x\u00e2y d\u1ef1ng n\u1ec1n t\u1ea3ng t\u01b0 duy ph\u1ea3n bi\u1ec7n, s\u1ef1 s\u00e1ng t\u1ea1o, v\u1eeba t\u0103ng c\u01b0\u1eddng v\u1ed1n t\u1eeb v\u1ef1ng chuy\u00ean ng\u00e0nh t\u1eeb nhi\u1ec1u l\u0129nh v\u1ef1c kh\u00e1c nhau \u0111\u1ec3 chinh ph\u1ee5c IELTS Reading v\u00e0 Writing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>H\u00e0nh Tr\u00ecnh B\u1ee9t Ph\u00e1 \u0110i\u1ec3m S\u1ed1 Nh\u1edd T\u01b0 Duy Ch\u1ee7 \u0110\u1ed9ng (Review Th\u1ef1c T\u1ebf)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u1ea5t nhi\u1ec1u h\u1ecdc vi\u00ean c\u1ee7a Mr. Tony \u0111\u00e3 bi\u1ebfn s\u1ef1 ki\u00ean tr\u00ec luy\u1ec7n t\u1eadp v\u00e0 ph\u01b0\u01a1ng ph\u00e1p Mindset-Based Method th\u00e0nh nh\u1eefng con s\u1ed1 bi\u1ebft n\u00f3i. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng c\u00e2u chuy\u1ec7n b\u1ee9t ph\u00e1 truy\u1ec1n c\u1ea3m h\u1ee9ng:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tuy\u1ebft Mai:<\/strong> B\u1eb1ng vi\u1ec7c t\u0103ng c\u01b0\u1eddng t\u1eeb v\u1ef1ng v\u00e0 ki\u1ebfn th\u1ee9c h\u1ecdc thu\u1eadt chuy\u00ean s\u00e2u, Mai \u0111\u00e3 xu\u1ea5t s\u1eafc chinh ph\u1ee5c \u0111i\u1ec3m tuy\u1ec7t \u0111\u1ed1i Reading 9.0, n\u00e2ng m\u1ee9c \u0111i\u1ec3m Overall l\u00ean 7.5. Xem h\u00e0nh tr\u00ecnh c\u1ee7a Tuy\u1ebft Mai: <a href=\"https:\/\/youtu.be\/eqpfKGyUze8\">https:\/\/youtu.be\/eqpfKGyUze8<\/a>.<\/li>\n\n\n\n<li><strong>Mr. D\u0169ng:<\/strong> T\u1eeb m\u1ed9t ng\u01b0\u1eddi m\u1ea5t g\u1ed1c, anh D\u0169ng \u0111\u00e3 ki\u00ean tr\u00ec \u00e1p d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p P.A.S v\u00e0 r\u00e8n luy\u1ec7n n\u1ed9i l\u1ef1c \u0111\u1ec3 \u0111\u1ea1t 6.0 IELTS ch\u1ec9 trong v\u1ecfn v\u1eb9n 3 th\u00e1ng. L\u1eafng nghe chia s\u1ebb c\u1ee7a anh D\u0169ng: <a href=\"https:\/\/youtu.be\/lr5ZUeWrZSM\">https:\/\/youtu.be\/lr5ZUeWrZSM<\/a>.<\/li>\n\n\n\n<li><strong>Gia H\u01b0ng:<\/strong> Chinh ph\u1ee5c band \u0111i\u1ec3m 7.5 IELTS khi ch\u1ec9 m\u1edbi h\u1ecdc c\u1ea5p 2 nh\u1edd \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng n\u1ec1n t\u1ea3ng t\u01b0 duy ph\u1ea3n bi\u1ec7n (Critical Thinking) t\u1eeb s\u1edbm v\u00e0 kh\u1ea3 n\u0103ng suy ngh\u0129 \u0111\u1ed9c l\u1eadp b\u1eb1ng ti\u1ebfng Anh. Xem review c\u1ee7a Gia H\u01b0ng: <a href=\"https:\/\/youtu.be\/xv4aXGl6A3I.\">https:\/\/youtu.be\/xv4aXGl6A3I.<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>K\u1ebft Lu\u1eadn<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vi\u1ec7c <strong>t\u1ea1o dictation cho \u0111o\u1ea1n v\u0103n h\u1ecdc t\u1eeb v\u1ef1ng<\/strong> \u0111\u00f2i h\u1ecfi s\u1ef1 ki\u00ean nh\u1eabn, nh\u01b0ng k\u1ebft qu\u1ea3 mang l\u1ea1i ch\u1eafc ch\u1eafn s\u1ebd l\u00e0m b\u1ea1n b\u1ea5t ng\u1edd. H\u00e3y k\u1ebft h\u1ee3p n\u00f3 c\u00f9ng t\u01b0 duy h\u1ecdc t\u1eadp ch\u1ee7 \u0111\u1ed9ng The Fulcrum &amp; F.A.Y \u0111\u1ec3 bi\u1ebfn ti\u1ebfng Anh tr\u1edf th\u00e0nh th\u1ebf m\u1ea1nh th\u1ef1c s\u1ef1 c\u1ee7a b\u1ea1n, kh\u00f4ng ch\u1ec9 trong ph\u00f2ng thi m\u00e0 c\u00f2n trong c\u00f4ng vi\u1ec7c sau n\u00e0y.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>N\u1ebfu c\u00f2n hoang mang ch\u01b0a bi\u1ebft n\u00ean h\u1ecdc IELTS\/TOEIC nh\u01b0 th\u1ebf n\u00e0o c\u00f3 th\u1ec3 inbox gia s\u01b0 IELTS online 0963023500.<\/strong><\/p>\n\n\n\n<div id=\"smart-cloze-app\">\n    <style>\n        #smart-cloze-app {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            display: flex;\n            justify-content: center;\n            padding: 20px;\n            box-sizing: border-box;\n            background: transparent;\n        }\n        #smart-cloze-app * { box-sizing: border-box; }\n        #smart-cloze-app .sc-container {\n            background: #ffffff;\n            border-radius: 16px;\n            box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n            width: 100%;\n            max-width: 750px;\n            padding: 25px;\n        }\n        #smart-cloze-app .sc-header {\n            text-align: center;\n            margin-bottom: 20px;\n            padding-bottom: 15px;\n            border-bottom: 2px solid #ecf0f1;\n        }\n        #smart-cloze-app .sc-header h3 {\n            margin: 0 0 10px 0;\n            color: #2c3e50;\n        }\n        #smart-cloze-app .sc-input-area {\n            width: 100%;\n            height: 120px;\n            padding: 12px;\n            font-size: 15px;\n            border: 2px solid #bdc3c7;\n            border-radius: 8px;\n            outline: none;\n            resize: vertical;\n            margin-bottom: 15px;\n            font-family: inherit;\n        }\n        #smart-cloze-app .sc-input-area:focus { border-color: #3498db; }\n        \n        #smart-cloze-app .sc-controls {\n            display: flex;\n            gap: 10px;\n            margin-bottom: 20px;\n            flex-wrap: wrap;\n            justify-content: center;\n        }\n        #smart-cloze-app .sc-select {\n            padding: 10px;\n            border-radius: 8px;\n            border: 2px solid #bdc3c7;\n            font-size: 14px;\n            flex: 1;\n            min-width: 130px;\n            outline: none;\n            cursor: pointer;\n        }\n        #smart-cloze-app .sc-btn {\n            padding: 10px 15px;\n            border: none;\n            border-radius: 8px;\n            font-size: 15px;\n            font-weight: bold;\n            cursor: pointer;\n            transition: opacity 0.2s;\n            flex: 1;\n            min-width: 130px;\n        }\n        #smart-cloze-app .sc-btn:hover { opacity: 0.8; }\n        #smart-cloze-app .btn-generate { background-color: #9b59b6; color: white; min-width: 100%; margin-top: 5px; }\n        #smart-cloze-app .btn-audio { background-color: #f1c40f; color: #333; }\n        #smart-cloze-app .btn-pause { background-color: #e67e22; color: white; }\n        #smart-cloze-app .btn-check { background-color: #2ecc71; color: white; }\n        #smart-cloze-app .btn-download { background-color: #34495e; color: white; }\n        \n        #smart-cloze-app .sc-workspace {\n            display: none; \n            background-color: #f8f9fa;\n            padding: 20px;\n            border-radius: 8px;\n            border: 1px solid #ececec;\n            line-height: 2.2;\n            font-size: 16px;\n            color: #34495e;\n            margin-bottom: 20px;\n            text-align: justify;\n        }\n        #smart-cloze-app .cloze-input {\n            width: 90px;\n            border: none;\n            border-bottom: 2px solid #3498db;\n            background: transparent;\n            text-align: center;\n            font-size: 16px;\n            font-weight: bold;\n            color: #e74c3c;\n            outline: none;\n            margin: 0 4px;\n            transition: all 0.3s;\n        }\n        #smart-cloze-app .cloze-input:focus { border-bottom-color: #e74c3c; }\n        #smart-cloze-app .cloze-input.correct { border-bottom-color: #2ecc71; color: #2ecc71; }\n        #smart-cloze-app .cloze-input.incorrect { border-bottom-color: #e74c3c; background-color: #fadbd8; }\n        \n        #smart-cloze-app .sc-feedback {\n            text-align: center;\n            font-size: 16px;\n            font-weight: bold;\n            margin-top: 10px;\n        }\n    <\/style>\n\n    <div class=\"sc-container\">\n        <div class=\"sc-header\">\n            <h3>C\u00f4ng C\u1ee5 Luy\u1ec7n Nghe Ch\u00e9p Ch\u00ednh T\u1ea3 (Dictation)<\/h3>\n            <p style=\"font-size: 14px; color: #7f8c8d; margin: 0;\">D\u00e1n \u0111o\u1ea1n v\u0103n ti\u1ebfng Anh v\u00e0o \u0111\u00e2y, ch\u1ecdn c\u1ea5p \u0111\u1ed9 v\u00e0 h\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o b\u00e0i t\u1eadp \u0111\u1ee5c l\u1ed7 ng\u1eabu nhi\u00ean.<\/p>\n        <\/div>\n\n        <textarea id=\"sc-source-text\" class=\"sc-input-area\" placeholder=\"D\u00e1n \u0111o\u1ea1n v\u0103n ti\u1ebfng Anh v\u00e0o \u0111\u00e2y...\"><\/textarea>\n\n        <div class=\"sc-controls\">\n            <select id=\"sc-accent\" class=\"sc-select\" title=\"Gi\u1ecdng \u0111\u1ecdc\">\n                <option value=\"en-US\">\ud83c\uddfa\ud83c\uddf8 Gi\u1ecdng M\u1ef9<\/option>\n                <option value=\"en-GB\">\ud83c\uddec\ud83c\udde7 Gi\u1ecdng Anh<\/option>\n            <\/select>\n\n            <select id=\"sc-speed\" class=\"sc-select\" title=\"T\u1ed1c \u0111\u1ed9 nghe\">\n                <option value=\"0.75\">\ud83d\udc22 Ch\u1eadm (0.75x)<\/option>\n                <option value=\"0.85\">\ud83d\udeb6 H\u01a1i ch\u1eadm (0.85x)<\/option>\n                <option value=\"1.0\" selected=\"\">\ud83c\udfc3 Chu\u1ea9n (1.0x)<\/option>\n                <option value=\"1.25\">\ud83c\udfc3\u200d\u2642\ufe0f Nhanh (1.25x)<\/option>\n            <\/select>\n\n            <select id=\"sc-level\" class=\"sc-select\" title=\"C\u1ea5p \u0111\u1ed9 kh\u00f3\">\n                <option value=\"0.15\">\ud83d\udfe2 D\u1ec5 (Che 15%)<\/option>\n                <option value=\"0.30\" selected=\"\">\ud83d\udfe1 TB (Che 30%)<\/option>\n                <option value=\"0.55\">\ud83d\udd34 Kh\u00f3 (Che 55%)<\/option>\n            <\/select>\n\n            <button class=\"sc-btn btn-generate\" onclick=\"scGenerateCloze()\">T\u1ea1o B\u00e0i T\u1eadp Ngay<\/button>\n        <\/div>\n\n        <div id=\"sc-workspace\" class=\"sc-workspace\"><\/div>\n\n        <div id=\"sc-action-area\" class=\"sc-controls\" style=\"display: none;\">\n            <button class=\"sc-btn btn-audio\" onclick=\"scPlayAudio()\">\ud83d\udd0a \u0110\u1ecdc<\/button>\n            <button id=\"sc-btn-pause\" class=\"sc-btn btn-pause\" onclick=\"scTogglePause()\">\u23f8 T\u1ea1m D\u1eebng<\/button>\n            <button class=\"sc-btn btn-check\" onclick=\"scCheckAnswers()\">\u2705 Ki\u1ec3m Tra<\/button>\n            <button class=\"sc-btn btn-download\" onclick=\"scDownloadDoc()\">\ud83d\udce5 T\u1ea3i \u0110\u1ec1<\/button>\n        <\/div>\n\n        <div id=\"sc-feedback\" class=\"sc-feedback\"><\/div>\n    <\/div>\n<\/div>\n\n<script>\n    let scOriginalText = \"\";\n\n    \/\/ Ch\u1ee9c n\u0103ng t\u1ea1o b\u00e0i \u0111\u1ee5c l\u1ed7\n    function scGenerateCloze() {\n        const text = document.getElementById('sc-source-text').value.trim();\n        if (!text) {\n            alert(\"Vui l\u00f2ng nh\u1eadp \u0111o\u1ea1n v\u0103n ti\u1ebfng Anh tr\u01b0\u1edbc khi t\u1ea1o b\u00e0i t\u1eadp!\");\n            return;\n        }\n        \n        \/\/ Reset tr\u1ea1ng th\u00e1i Audio n\u1ebfu \u0111ang \u0111\u1ecdc\n        window.speechSynthesis.cancel();\n        document.getElementById('sc-btn-pause').textContent = \"\u23f8 T\u1ea1m D\u1eebng\";\n\n        scOriginalText = text; \n        const difficultyRate = parseFloat(document.getElementById('sc-level').value);\n        \n        const workspace = document.getElementById('sc-workspace');\n        const actionArea = document.getElementById('sc-action-area');\n        const feedback = document.getElementById('sc-feedback');\n        \n        feedback.innerHTML = \"\";\n        \n        const tokens = text.split(\/(\\s+)\/); \n        let htmlOutput = \"\";\n        let inputCount = 0;\n\n        tokens.forEach(token => {\n            if (!token.trim()) {\n                htmlOutput += token;\n                return;\n            }\n            const match = token.match(\/^([^a-zA-Z0-9]*)([a-zA-Z0-9'-]+)([^a-zA-Z0-9]*)$\/);\n            \n            if (match) {\n                const prefix = match[1];\n                const word = match[2];\n                const suffix = match[3];\n\n                if (word.length > 2 && Math.random() < difficultyRate) {\n                    const cleanWord = word.toLowerCase();\n                    htmlOutput += `${prefix}<input type=\"text\" class=\"cloze-input\" data-answer=\"${cleanWord}\">${suffix}`;\n                    inputCount++;\n                } else {\n                    htmlOutput += token;\n                }\n            } else {\n                htmlOutput += token;\n            }\n        });\n\n        if (inputCount === 0) {\n            htmlOutput = \"<p style='color:#e74c3c; text-align:center;'>\u0110o\u1ea1n v\u0103n qu\u00e1 ng\u1eafn ho\u1eb7c ch\u01b0a t\u1ea1o \u0111\u01b0\u1ee3c \u00f4 tr\u1ed1ng. Vui l\u00f2ng b\u1ea5m 'T\u1ea1o B\u00e0i T\u1eadp' l\u1ea1i!<\/p>\";\n            actionArea.style.display = \"none\";\n        } else {\n            actionArea.style.display = \"flex\";\n        }\n\n        workspace.innerHTML = htmlOutput;\n        workspace.style.display = \"block\";\n    }\n\n    \/\/ Ch\u1ee9c n\u0103ng \u0110\u1ecdc Audio\n    function scPlayAudio() {\n        if (!scOriginalText) return;\n        \n        \/\/ D\u1eebng c\u00e1c lu\u1ed3ng \u0111\u1ecdc tr\u01b0\u1edbc \u0111\u00f3\n        window.speechSynthesis.cancel();\n        document.getElementById('sc-btn-pause').textContent = \"\u23f8 T\u1ea1m D\u1eebng\";\n\n        const utterance = new SpeechSynthesisUtterance(scOriginalText);\n        const accent = document.getElementById('sc-accent').value;\n        const speed = parseFloat(document.getElementById('sc-speed').value);\n        \n        const voices = window.speechSynthesis.getVoices();\n        const voice = voices.find(v => v.lang === accent) || voices.find(v => v.lang.includes(accent.split('-')));\n        if (voice) {\n            utterance.voice = voice;\n        }\n        \n        \/\/ Thi\u1ebft l\u1eadp t\u1ed1c \u0111\u1ed9 \u0111\u1ecdc\n        utterance.rate = speed; \n\n        \/\/ S\u1ef1 ki\u1ec7n khi \u0111\u1ecdc xong th\u00ec reset n\u00fat T\u1ea1m d\u1eebng\n        utterance.onend = function() {\n            document.getElementById('sc-btn-pause').textContent = \"\u23f8 T\u1ea1m D\u1eebng\";\n        };\n\n        window.speechSynthesis.speak(utterance);\n    }\n\n    \/\/ Ch\u1ee9c n\u0103ng T\u1ea1m D\u1eebng \/ Ti\u1ebfp T\u1ee5c\n    function scTogglePause() {\n        const synth = window.speechSynthesis;\n        const pauseBtn = document.getElementById('sc-btn-pause');\n\n        \/\/ Ch\u1ec9 ho\u1ea1t \u0111\u1ed9ng khi m\u00e1y \u0111ang trong tr\u1ea1ng th\u00e1i \u0111\u1ecdc\n        if (synth.speaking) {\n            if (synth.paused) {\n                synth.resume(); \/\/ Ti\u1ebfp t\u1ee5c \u0111\u1ecdc\n                pauseBtn.textContent = \"\u23f8 T\u1ea1m D\u1eebng\";\n            } else {\n                synth.pause(); \/\/ T\u1ea1m d\u1eebng\n                pauseBtn.textContent = \"\u25b6\ufe0f Ti\u1ebfp T\u1ee5c\";\n            }\n        } else {\n            alert(\"B\u1ea1n c\u1ea7n b\u1ea5m n\u00fat '\ud83d\udd0a \u0110\u1ecdc' tr\u01b0\u1edbc khi c\u00f3 th\u1ec3 T\u1ea1m d\u1eebng!\");\n        }\n    }\n\n    \/\/ Ch\u1ee9c n\u0103ng Ki\u1ec3m tra \u0111\u00e1p \u00e1n\n    function scCheckAnswers() {\n        const inputs = document.querySelectorAll('#sc-workspace .cloze-input');\n        let correctCount = 0;\n        let totalCount = inputs.length;\n\n        if (totalCount === 0) return;\n\n        inputs.forEach(input => {\n            const userAnswer = input.value.trim().toLowerCase();\n            const correctAnswer = input.getAttribute('data-answer');\n\n            input.classList.remove('correct', 'incorrect');\n\n            if (userAnswer === correctAnswer) {\n                input.classList.add('correct');\n                correctCount++;\n            } else {\n                input.classList.add('incorrect');\n            }\n        });\n\n        const feedback = document.getElementById('sc-feedback');\n        if (correctCount === totalCount) {\n            feedback.innerHTML = `\ud83c\udf89 Xu\u1ea5t s\u1eafc! B\u1ea1n \u0111\u00e3 nghe v\u00e0 \u0111i\u1ec1n \u0111\u00fang ${correctCount}\/${totalCount} t\u1eeb.`;\n            feedback.style.color = \"#2ecc71\";\n        } else {\n            feedback.innerHTML = `\ud83d\udcaa B\u1ea1n \u0111i\u1ec1n \u0111\u00fang ${correctCount}\/${totalCount} t\u1eeb. B\u1ea5m '\u25b6\ufe0f Ti\u1ebfp T\u1ee5c' nghe l\u1ea1i \u0111\u1ec3 s\u1eeda \u00f4 m\u00e0u \u0111\u1ecf nh\u00e9!`;\n            feedback.style.color = \"#e74c3c\";\n        }\n    }\n\n    \/\/ Ch\u1ee9c n\u0103ng Xu\u1ea5t file Word (.doc)\n    function scDownloadDoc() {\n        const workspace = document.getElementById('sc-workspace');\n        if (workspace.style.display === \"none\" || !workspace.innerHTML) return;\n\n        let clone = workspace.cloneNode(true);\n        let inputs = clone.querySelectorAll('input');\n        inputs.forEach(input => {\n            let blank = document.createElement('span');\n            blank.innerHTML = \" <b>_________<\/b> \"; \n            input.parentNode.replaceChild(blank, input);\n        });\n\n        const header = \"<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http:\/\/www.w3.org\/TR\/REC-html40'><head><meta charset='utf-8'><title>Dictation Exercise<\/title><\/head><body>\";\n        const footer = \"<\/body><\/html>\";\n        const content = \"<h2 style='text-align:center; color:#2c3e50;'>B\u00c0I T\u1eacP \u0110I\u1ec0N T\u1eea (DICTATION)<\/h2>\" \n                        + \"<p style='line-height:2; font-size:14pt; font-family: Arial, sans-serif;'>\" + clone.innerHTML + \"<\/p>\"\n                        + \"<br><hr><br><h3 style='color:#e74c3c;'>\u0110\u00c1P \u00c1N (ANSWER KEY):<\/h3>\"\n                        + \"<p style='line-height:1.5; font-size:12pt; font-family: Arial, sans-serif; color:#7f8c8d;'>\" + scOriginalText + \"<\/p>\";\n        const sourceHTML = header + content + footer;\n\n        const source = 'data:application\/vnd.ms-word;charset=utf-8,' + encodeURIComponent(sourceHTML);\n        const fileDownload = document.createElement(\"a\");\n        document.body.appendChild(fileDownload);\n        fileDownload.href = source;\n        fileDownload.download = 'Bai_Tap_Dictation.doc';\n        fileDownload.click();\n        document.body.removeChild(fileDownload);\n    }\n\n    \/\/ Load gi\u1ecdng \u0111\u1ecdc tr\u01b0\u1edbc \u0111\u1ec3 tr\u00e1nh l\u1ed7i Delay c\u1ee7a tr\u00ecnh duy\u1ec7t\n    window.speechSynthesis.onvoiceschanged = function() {\n        window.speechSynthesis.getVoices();\n    };\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Ghi ch\u00e9p ch\u00ednh t\u1ea3 (Dictation) t\u1eeb l\u00e2u \u0111\u00e3 \u0111\u01b0\u1ee3c xem l\u00e0 m\u1ed9t trong nh\u1eefng ph\u01b0\u01a1ng ph\u00e1p kinh \u0111i\u1ec3n v\u00e0 hi\u1ec7u qu\u1ea3 nh\u1ea5t \u0111\u1ec3 n\u00e2ng cao k\u1ef9<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[4,7],"tags":[],"class_list":["post-308","post","type-post","status-publish","format-standard","hentry","category-ielts-materials","category-listening"],"_links":{"self":[{"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=\/wp\/v2\/posts\/308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=308"}],"version-history":[{"count":1,"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=\/wp\/v2\/posts\/308\/revisions"}],"predecessor-version":[{"id":309,"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=\/wp\/v2\/posts\/308\/revisions\/309"}],"wp:attachment":[{"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/theselfmadepeople.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}