
{"id":14177,"date":"2026-09-22T14:10:09","date_gmt":"2026-09-22T08:40:09","guid":{"rendered":"https:\/\/indianbrahmins.com\/?page_id=14177"},"modified":"2026-09-22T14:10:47","modified_gmt":"2026-09-22T08:40:47","slug":"tttt","status":"publish","type":"page","link":"https:\/\/indianbrahmins.com\/index.php\/tttt\/","title":{"rendered":"TTTT"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"14177\" class=\"elementor elementor-14177\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7fb0156 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"7fb0156\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e5a2f03 elementor-widget elementor-widget-html\" data-id=\"e5a2f03\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =====================================================\r\n BRAHMINS HELP DESK \/ INDIAN BRAHMINS\r\n BHAGAVATAM VOICE RECITATION HIGHLIGHTER\r\n START + STOP + TELUGU\/SANSKRIT SPEECH RECOGNITION\r\n LINE MATCHING + YELLOW HIGHLIGHT + AUTO SCROLL\r\n===================================================== -->\r\n\r\n<style>\r\n#bhagavatamVoiceBox{\r\n    position:sticky;\r\n    top:10px;\r\n    z-index:9999;\r\n    background:#fffaf0;\r\n    border:2px solid #9b4d00;\r\n    border-radius:12px;\r\n    padding:15px;\r\n    margin:15px 0;\r\n    text-align:center;\r\n    box-shadow:0 3px 12px rgba(0,0,0,.15);\r\n}\r\n\r\n#bhagavatamVoiceBox h3{\r\n    margin:0 0 12px;\r\n    color:#8b4513;\r\n    font-size:20px;\r\n}\r\n\r\n.voice-btn{\r\n    border:none;\r\n    border-radius:8px;\r\n    padding:12px 22px;\r\n    margin:5px;\r\n    font-size:16px;\r\n    font-weight:bold;\r\n    cursor:pointer;\r\n}\r\n\r\n#startRecitation{\r\n    background:#198754;\r\n    color:white;\r\n}\r\n\r\n#stopRecitation{\r\n    background:#dc3545;\r\n    color:white;\r\n}\r\n\r\n#voiceStatus{\r\n    margin-top:10px;\r\n    font-weight:bold;\r\n    color:#555;\r\n}\r\n\r\n#heardText{\r\n    margin-top:8px;\r\n    font-size:14px;\r\n    color:#555;\r\n}\r\n\r\n\/* CURRENT SLOKA *\/\r\n.voice-current-sloka{\r\n    background:#fff176 !important;\r\n    color:#000 !important;\r\n    padding:8px !important;\r\n    border-radius:6px;\r\n    box-shadow:0 0 0 3px rgba(255,193,7,.35);\r\n    transition:all .3s ease;\r\n}\r\n\r\n\/* ALREADY READ *\/\r\n.voice-completed-sloka{\r\n    border-left:5px solid #28a745 !important;\r\n    padding-left:10px !important;\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<div id=\"bhagavatamVoiceBox\">\r\n\r\n    <h3>\ud83c\udf99\ufe0f \u0c2d\u0c3e\u0c17\u0c35\u0c24 \u0c36\u0c4d\u0c32\u0c4b\u0c15 \u0c2a\u0c20\u0c28\u0c02<\/h3>\r\n\r\n    <button id=\"startRecitation\"\r\n            class=\"voice-btn\"\r\n            type=\"button\">\r\n        \ud83c\udfa4 START RECITING\r\n    <\/button>\r\n\r\n    <button id=\"stopRecitation\"\r\n            class=\"voice-btn\"\r\n            type=\"button\">\r\n        \u23f9 STOP\r\n    <\/button>\r\n\r\n    <div id=\"voiceStatus\">\r\n        Ready\r\n    <\/div>\r\n\r\n    <div id=\"heardText\"><\/div>\r\n\r\n<\/div>\r\n\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function(){\r\n\r\n    \/* =========================================\r\n       SPEECH RECOGNITION CHECK\r\n    ========================================= *\/\r\n\r\n    const SpeechRecognition =\r\n        window.SpeechRecognition ||\r\n        window.webkitSpeechRecognition;\r\n\r\n    const statusBox =\r\n        document.getElementById(\"voiceStatus\");\r\n\r\n    const heardBox =\r\n        document.getElementById(\"heardText\");\r\n\r\n    if(!SpeechRecognition){\r\n\r\n        statusBox.innerHTML =\r\n        \"\u26a0\ufe0f Speech Recognition is not supported in this browser. Please use Google Chrome.\";\r\n\r\n        return;\r\n    }\r\n\r\n\r\n    \/* =========================================\r\n       GET PAGE TEXT ELEMENTS\r\n    ========================================= *\/\r\n\r\n    const possibleElements =\r\n        document.querySelectorAll(\r\n        \"p, h1, h2, h3, h4, h5, h6, li, blockquote\"\r\n        );\r\n\r\n\r\n    let slokaElements = [];\r\n\r\n\r\n    \/* =========================================\r\n       IDENTIFY SLOKAS\r\n       Ignore Tatparyam and small text\r\n    ========================================= *\/\r\n\r\n    possibleElements.forEach(function(el){\r\n\r\n        let text =\r\n            el.innerText.trim();\r\n\r\n        if(text.length < 15)\r\n            return;\r\n\r\n        if(text.includes(\"\u0c24\u0c3e\u0c24\u0c4d\u0c2a\u0c30\u0c4d\u0c2f\u0c02\"))\r\n            return;\r\n\r\n        if(text.includes(\"START RECITING\"))\r\n            return;\r\n\r\n        if(text.includes(\"STOP\"))\r\n            return;\r\n\r\n        \/*\r\n        Detect Telugu \/ Sanskrit Telugu-script text\r\n        *\/\r\n\r\n        let teluguCharacters =\r\n            text.match(\/[\\u0C00-\\u0C7F]\/g);\r\n\r\n        if(\r\n            teluguCharacters &&\r\n            teluguCharacters.length > 10\r\n        ){\r\n            slokaElements.push(el);\r\n        }\r\n\r\n    });\r\n\r\n\r\n    console.log(\r\n        \"Voice Matching Elements:\",\r\n        slokaElements.length\r\n    );\r\n\r\n\r\n    \/* =========================================\r\n       NORMALIZE TEXT\r\n       Removes punctuation\/spaces\r\n       Helps fuzzy matching\r\n    ========================================= *\/\r\n\r\n    function normalizeText(text){\r\n\r\n        return text\r\n        .toLowerCase()\r\n\r\n        .replace(\/[.,!?;:'\"\u201c\u201d\u2018\u2019()[\\]{}\u0964\u0965\\-\u2013\u2014]\/g,\"\")\r\n\r\n        .replace(\/\\s+\/g,\" \")\r\n\r\n        .trim();\r\n    }\r\n\r\n\r\n\r\n    \/* =========================================\r\n       WORD SIMILARITY\r\n    ========================================= *\/\r\n\r\n    function similarity(\r\n        spokenText,\r\n        pageText\r\n    ){\r\n\r\n        spokenText =\r\n            normalizeText(spokenText);\r\n\r\n        pageText =\r\n            normalizeText(pageText);\r\n\r\n\r\n        let spokenWords =\r\n            spokenText.split(\" \");\r\n\r\n        let pageWords =\r\n            pageText.split(\" \");\r\n\r\n\r\n        let matched = 0;\r\n\r\n\r\n        spokenWords.forEach(function(word){\r\n\r\n            if(word.length < 2)\r\n                return;\r\n\r\n\r\n            pageWords.forEach(function(pWord){\r\n\r\n                \/*\r\n                Exact word match\r\n                *\/\r\n\r\n                if(pWord === word){\r\n\r\n                    matched++;\r\n\r\n                }\r\n\r\n                \/*\r\n                Partial matching\r\n                Useful for Sanskrit recognition\r\n                *\/\r\n\r\n                else if(\r\n                    word.length >= 4 &&\r\n                    (\r\n                        pWord.includes(word) ||\r\n                        word.includes(pWord)\r\n                    )\r\n                ){\r\n\r\n                    matched += 0.7;\r\n\r\n                }\r\n\r\n            });\r\n\r\n        });\r\n\r\n\r\n        if(spokenWords.length === 0)\r\n            return 0;\r\n\r\n\r\n        return matched \/\r\n               spokenWords.length;\r\n\r\n    }\r\n\r\n\r\n\r\n    \/* =========================================\r\n       FIND BEST MATCHING SLOKA\r\n    ========================================= *\/\r\n\r\n    function findBestSloka(spoken){\r\n\r\n        let bestScore = 0;\r\n\r\n        let bestElement = null;\r\n\r\n\r\n        slokaElements.forEach(function(el){\r\n\r\n            let score =\r\n                similarity(\r\n                    spoken,\r\n                    el.innerText\r\n                );\r\n\r\n\r\n            if(score > bestScore){\r\n\r\n                bestScore =\r\n                    score;\r\n\r\n                bestElement =\r\n                    el;\r\n\r\n            }\r\n\r\n        });\r\n\r\n\r\n        \/*\r\n        Minimum match level\r\n\r\n        0.25 = flexible\r\n        0.40 = medium\r\n        0.60 = strict\r\n        *\/\r\n\r\n        if(bestScore >= 0.25){\r\n\r\n            highlightSloka(\r\n                bestElement,\r\n                bestScore\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n    \/* =========================================\r\n       HIGHLIGHT + AUTO SCROLL\r\n    ========================================= *\/\r\n\r\n    let previousElement = null;\r\n\r\n\r\n    function highlightSloka(\r\n        element,\r\n        score\r\n    ){\r\n\r\n        if(!element)\r\n            return;\r\n\r\n\r\n        if(\r\n            previousElement &&\r\n            previousElement !== element\r\n        ){\r\n\r\n            previousElement\r\n                .classList\r\n                .remove(\r\n                    \"voice-current-sloka\"\r\n                );\r\n\r\n\r\n            previousElement\r\n                .classList\r\n                .add(\r\n                    \"voice-completed-sloka\"\r\n                );\r\n\r\n        }\r\n\r\n\r\n        element\r\n            .classList\r\n            .add(\r\n                \"voice-current-sloka\"\r\n            );\r\n\r\n\r\n        previousElement =\r\n            element;\r\n\r\n\r\n        \/*\r\n        AUTO SCROLL\r\n        *\/\r\n\r\n        element.scrollIntoView({\r\n\r\n            behavior:\"smooth\",\r\n\r\n            block:\"center\"\r\n\r\n        });\r\n\r\n\r\n        statusBox.innerHTML =\r\n            \"\ud83d\udfe1 Matching Sloka \u2014 \" +\r\n            Math.round(score * 100) +\r\n            \"%\";\r\n\r\n    }\r\n\r\n\r\n\r\n    \/* =========================================\r\n       SPEECH RECOGNITION SETTINGS\r\n    ========================================= *\/\r\n\r\n    const recognition =\r\n        new SpeechRecognition();\r\n\r\n\r\n    \/*\r\n    Telugu India Recognition\r\n\r\n    Sanskrit spoken in Telugu style\r\n    generally works better initially\r\n    with Telugu India recognition.\r\n    *\/\r\n\r\n    recognition.lang =\r\n        \"te-IN\";\r\n\r\n\r\n    recognition.continuous =\r\n        true;\r\n\r\n\r\n    recognition.interimResults =\r\n        true;\r\n\r\n\r\n    recognition.maxAlternatives =\r\n        3;\r\n\r\n\r\n\r\n    let shouldContinue =\r\n        false;\r\n\r\n\r\n    \/* =========================================\r\n       START\r\n    ========================================= *\/\r\n\r\n    document\r\n    .getElementById(\r\n        \"startRecitation\"\r\n    )\r\n    .addEventListener(\r\n        \"click\",\r\n        function(){\r\n\r\n            shouldContinue =\r\n                true;\r\n\r\n            try{\r\n\r\n                recognition.start();\r\n\r\n                statusBox.innerHTML =\r\n                    \"\ud83c\udfa4 Listening... \u0c36\u0c4d\u0c32\u0c4b\u0c15\u0c02 \u0c1a\u0c26\u0c35\u0c02\u0c21\u0c3f\";\r\n\r\n            }\r\n            catch(e){\r\n\r\n                console.log(e);\r\n\r\n            }\r\n\r\n        }\r\n    );\r\n\r\n\r\n\r\n    \/* =========================================\r\n       STOP\r\n    ========================================= *\/\r\n\r\n    document\r\n    .getElementById(\r\n        \"stopRecitation\"\r\n    )\r\n    .addEventListener(\r\n        \"click\",\r\n        function(){\r\n\r\n            shouldContinue =\r\n                false;\r\n\r\n            recognition.stop();\r\n\r\n            statusBox.innerHTML =\r\n                \"\u23f9 Recitation Stopped\";\r\n\r\n        }\r\n    );\r\n\r\n\r\n\r\n    \/* =========================================\r\n       RECEIVE VOICE TEXT\r\n    ========================================= *\/\r\n\r\n    recognition.onresult =\r\n        function(event){\r\n\r\n            let currentText = \"\";\r\n\r\n\r\n            for(\r\n                let i =\r\n                    event.resultIndex;\r\n\r\n                i <\r\n                    event.results.length;\r\n\r\n                i++\r\n            ){\r\n\r\n                currentText +=\r\n                    event.results[i][0]\r\n                    .transcript +\r\n                    \" \";\r\n\r\n            }\r\n\r\n\r\n            currentText =\r\n                currentText.trim();\r\n\r\n\r\n            heardBox.innerHTML =\r\n                \"\ud83c\udfa7 Heard: \" +\r\n                currentText;\r\n\r\n\r\n            if(\r\n                currentText.length > 2\r\n            ){\r\n\r\n                findBestSloka(\r\n                    currentText\r\n                );\r\n\r\n            }\r\n\r\n        };\r\n\r\n\r\n\r\n    \/* =========================================\r\n       AUTO RESTART\r\n       Browser may stop listening automatically\r\n    ========================================= *\/\r\n\r\n    recognition.onend =\r\n        function(){\r\n\r\n            if(\r\n                shouldContinue\r\n            ){\r\n\r\n                setTimeout(\r\n                    function(){\r\n\r\n                        try{\r\n\r\n                            recognition.start();\r\n\r\n                        }\r\n                        catch(e){}\r\n\r\n                    },\r\n                    500\r\n                );\r\n\r\n            }\r\n\r\n        };\r\n\r\n\r\n\r\n    \/* =========================================\r\n       ERROR HANDLING\r\n    ========================================= *\/\r\n\r\n    recognition.onerror =\r\n        function(event){\r\n\r\n            console.log(\r\n                \"Speech Error:\",\r\n                event.error\r\n            );\r\n\r\n\r\n            if(\r\n                event.error ===\r\n                \"not-allowed\"\r\n            ){\r\n\r\n                shouldContinue =\r\n                    false;\r\n\r\n                statusBox.innerHTML =\r\n                    \"\u274c Microphone permission \u0c07\u0c35\u0c4d\u0c35\u0c02\u0c21\u0c3f.\";\r\n\r\n            }\r\n\r\n            else if(\r\n                event.error ===\r\n                \"no-speech\"\r\n            ){\r\n\r\n                statusBox.innerHTML =\r\n                    \"\ud83c\udfa4 Voice \u0c35\u0c3f\u0c28\u0c3f\u0c2a\u0c3f\u0c02\u0c1a\u0c32\u0c47\u0c26\u0c41. \u0c2e\u0c33\u0c4d\u0c33\u0c40 \u0c1a\u0c26\u0c35\u0c02\u0c21\u0c3f.\";\r\n\r\n            }\r\n\r\n            else{\r\n\r\n                statusBox.innerHTML =\r\n                    \"\u26a0\ufe0f Voice Error: \" +\r\n                    event.error;\r\n\r\n            }\r\n\r\n        };\r\n\r\n\r\n});\r\n<\/script>\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>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf99\ufe0f \u0c2d\u0c3e\u0c17\u0c35\u0c24 \u0c36\u0c4d\u0c32\u0c4b\u0c15 \u0c2a\u0c20\u0c28\u0c02 \ud83c\udfa4 START RECITING \u23f9 STOP Ready<\/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-14177","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/pages\/14177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/comments?post=14177"}],"version-history":[{"count":4,"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/pages\/14177\/revisions"}],"predecessor-version":[{"id":14184,"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/pages\/14177\/revisions\/14184"}],"wp:attachment":[{"href":"https:\/\/indianbrahmins.com\/index.php\/wp-json\/wp\/v2\/media?parent=14177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}