Libraryless. Click here for Pure Java version (2090L/17K/55K).
!752 !include #1002931 // Pivo Logic (include) p { pivoLoad(); } static S rawLink(S pageName) { ret "/" + parseSnippetID(getProgramID()) + "/raw/" + pageName; } static S html(S uri, Map<S, S> params) { if (eq(uri, "/has-speech")) { S s = params.get("q"); ((ThreadLocal<Boolean>) get(getMainBot(), "attn")).set(true); pivoMode. set(true); S text = //askSelf(s); callStaticAnswerMethod(mc(), s); if (empty(text)) ret ""; S soundURL = getSoundURLCereproc(text, voice); S html = [[ <audio controls autoplay> <source src="SRC" type="audio/mpeg"> ! Kein Ton im Browser ! </audio> ]]; html = html.replace("SRC", htmlencode(soundURL)); ret "Speech: " + htmlencode(text) + "<br>" + html; } if (eq(uri, "/empty")) { ret ""; } if (eq(uri, "/upper")) { S html = [=[ <!DOCTYPE html> <meta charset="utf-8"> <title>TinyBrain Speech Demo</title> <style> * { font-family: Verdana, Arial, sans-serif; } a:link { color:#000; text-decoration: none; } a:visited { color:#000; } a:hover { color:#33F; } .button { background: -webkit-linear-gradient(top,#008dfd 0,#0370ea 100%); border: 1px solid #076bd2; border-radius: 3px; color: #fff; display: none; font-size: 13px; font-weight: bold; line-height: 1.3; padding: 8px 25px; text-align: center; text-shadow: 1px 1px 1px #076bd2; letter-spacing: normal; } .center { padding: 10px; text-align: center; } .final { color: black; padding-right: 3px; } .interim { color: gray; } .info { font-size: 34px; text-align: center; color: #777; display: none; } .right { float: right; } .sidebyside { display: inline-block; width: 45%; min-height: 40px; text-align: left; vertical-align: top; } #headline { font-size: 80px; font-weight: 300; } #info { font-size: 50px; text-align: center; color: #777; visibility: hidden; } #results { font-size: 55px; font-weight: bold; border: 1px solid #ddd; padding: 15px; text-align: left; min-height: 50px; } #start_button { border: 0; background-color:transparent; padding: 0; } </style> <div id="info"> <p id="info_start">Click on the microphone icon and begin speaking.</p> <p id="info_speak_now">Speak after the bleep.</p> <p id="info_no_speech">No speech was detected</p> <p id="info_no_microphone" style="display:none"> No microphone was found. Ensure that a microphone is installed and that <a href="//support.google.com/chrome/bin/answer.py?hl=en&answer=1407892"> microphone settings</a> are configured correctly.</p> <p id="info_allow">Click the "Allow" button.</p> <p id="info_denied">Permission to use microphone was denied.</p> <p id="info_blocked">Permission to use microphone is blocked. To change, go to chrome://settings/contentExceptions#media-stream</p> <p id="info_upgrade">Web Speech API is not supported by this browser. Upgrade to <a href="//www.google.com/chrome">Chrome</a> version 25 or later.</p> </div> <div class="right"> <button id="start_button" onclick="startButton(event)"> <img id="start_img" src="http://tinybrain.de:8080/speech/mic.gif" width="120" alt="Start"></button> </div> <div id="results"> <span id="final_span" class="final"></span> <span id="interim_span" class="interim"></span> <p> </div> <div class="center"> <p> <div id="div_language"> <?= $mode ?> <select id="select_language" onchange="updateCountry()"></select> <select id="select_dialect"></select> </div> </div> <script> var langs = [['Afrikaans', ['af-ZA']], ['Bahasa Indonesia',['id-ID']], ['Bahasa Melayu', ['ms-MY']], ['Català', ['ca-ES']], ['?eština', ['cs-CZ']], ['Deutsch', ['de-DE']], ['English', ['en-AU', 'Australia'], ['en-CA', 'Canada'], ['en-IN', 'India'], ['en-NZ', 'New Zealand'], ['en-ZA', 'South Africa'], ['en-GB', 'United Kingdom'], ['en-US', 'United States']], ['Español', ['es-AR', 'Argentina'], ['es-BO', 'Bolivia'], ['es-CL', 'Chile'], ['es-CO', 'Colombia'], ['es-CR', 'Costa Rica'], ['es-EC', 'Ecuador'], ['es-SV', 'El Salvador'], ['es-ES', 'España'], ['es-US', 'Estados Unidos'], ['es-GT', 'Guatemala'], ['es-HN', 'Honduras'], ['es-MX', 'México'], ['es-NI', 'Nicaragua'], ['es-PA', 'Panamá'], ['es-PY', 'Paraguay'], ['es-PE', 'Perú'], ['es-PR', 'Puerto Rico'], ['es-DO', 'República Dominicana'], ['es-UY', 'Uruguay'], ['es-VE', 'Venezuela']], ['Euskara', ['eu-ES']], ['Français', ['fr-FR']], ['Galego', ['gl-ES']], ['Hrvatski', ['hr_HR']], ['IsiZulu', ['zu-ZA']], ['Íslenska', ['is-IS']], ['Italiano', ['it-IT', 'Italia'], ['it-CH', 'Svizzera']], ['Magyar', ['hu-HU']], ['Nederlands', ['nl-NL']], ['Norsk bokmål', ['nb-NO']], ['Polski', ['pl-PL']], ['Português', ['pt-BR', 'Brasil'], ['pt-PT', 'Portugal']], ['Român?', ['ro-RO']], ['Sloven?ina', ['sk-SK']], ['Suomi', ['fi-FI']], ['Svenska', ['sv-SE']], ['Türkçe', ['tr-TR']], ['?????????', ['bg-BG']], ['P??????', ['ru-RU']], ['??????', ['sr-RS']], ['???', ['ko-KR']], ['??', ['cmn-Hans-CN', '??? (????)'], ['cmn-Hans-HK', '??? (??)'], ['cmn-Hant-TW', '?? (??)'], ['yue-Hant-HK', '?? (??)']], ['???', ['ja-JP']], ['Lingua lat?na', ['la']]]; for (var i = 0; i < langs.length; i++) { select_language.options[i] = new Option(langs[i][0], i); } select_language.selectedIndex = 5; updateCountry(); select_dialect.selectedIndex = 6; showInfo('info_start'); function updateCountry() { for (var i = select_dialect.options.length - 1; i >= 0; i--) { select_dialect.remove(i); } var list = langs[select_language.selectedIndex]; for (var i = 1; i < list.length; i++) { select_dialect.options.add(new Option(list[i][1], list[i][0])); } select_dialect.style.visibility = list[1].length == 1 ? 'hidden' : 'visible'; } var final_transcript = ''; var recognizing = false; var ignore_onend; var ignore_result; var start_timestamp; if (!('webkitSpeechRecognition' in window)) { upgrade(); } else { var contentFrame = parent.contentframe; var lastText = ""; start_button.style.display = 'inline-block'; var recognition = new webkitSpeechRecognition(); recognition.continuous = false; // TRUE recognition.interimResults = false; recognition.onstart = function() { recognizing = true; showInfo('info_speak_now'); start_img.src = 'http://tinybrain.de:8080/speech/mic-animate.gif'; }; recognition.onerror = function(event) { if (event.error == 'no-speech') { start_img.src = 'http://tinybrain.de:8080/speech/mic.gif'; showInfo('info_no_speech'); ignore_onend = true; } if (event.error == 'audio-capture') { start_img.src = 'http://tinybrain.de:8080/speech/mic.gif'; showInfo('info_no_microphone'); ignore_onend = true; } if (event.error == 'not-allowed') { if (event.timeStamp - start_timestamp < 100) { showInfo('info_blocked'); } else { showInfo('info_denied'); } ignore_onend = true; } }; recognition.onend = function() { recognizing = false; if (ignore_onend) { return; } start_img.src = 'http://tinybrain.de:8080/speech/mic.gif'; //final_transcript = ""; // DEH HACK if (!final_transcript) { showInfo('info_start'); return; } showInfo(''); if (window.getSelection) { window.getSelection().removeAllRanges(); var range = document.createRange(); range.selectNode(document.getElementById('final_span')); window.getSelection().addRange(range); } }; recognition.onresult = function(event) { var interim_transcript = ''; if (ignore_result) { ignore_result = false; return; } for (var i = event.resultIndex; i < event.results.length; ++i) { if (event.results[i].isFinal) { var newData = event.results[i][0].transcript; //final_transcript += newData; final_transcript = newData; var frameURL = "LINK/has-speech?q=" + encodeURIComponent(newData); if (contentFrame && lastText != newData) { lastText = newData; contentFrame.location.href = frameURL; } } else { interim_transcript += event.results[i][0].transcript; } } final_transcript = capitalize(final_transcript); final_span.innerHTML = linebreak(final_transcript); interim_span.innerHTML = linebreak(interim_transcript); if (/*final_transcript ||*/ interim_transcript) { showButtons('inline-block'); } }; startRecognition(); } function upgrade() { start_button.style.visibility = 'hidden'; showInfo('info_upgrade'); } var two_line = /\n\n/g; var one_line = /\n/g; function linebreak(s) { return s.replace(two_line, '<p></p>').replace(one_line, '<br>'); } var first_char = /\S/; function capitalize(s) { return s.replace(first_char, function(m) { return m.toUpperCase(); }); } function copyButton() { if (recognizing) { recognizing = false; recognition.stop(); } copy_button.style.display = 'none'; copy_info.style.display = 'inline-block'; showInfo(''); } function startButton(event) { startRecognition(); } function startRecognition() { if (recognizing) { recognition.stop(); ignore_result = true; return; } final_transcript = ''; recognition.lang = select_dialect.value; recognition.start(); ignore_onend = false; final_span.innerHTML = ''; interim_span.innerHTML = ''; start_img.src = 'http://tinybrain.de:8080/speech/mic-slash.gif'; showInfo('info_allow'); showButtons('none'); start_timestamp = event.timeStamp; } function showInfo(s) { if (s) { for (var child = info.firstChild; child; child = child.nextSibling) { if (child.style) { child.style.display = child.id == s ? 'inline' : 'none'; } } info.style.visibility = 'visible'; } else { info.style.visibility = 'hidden'; } } var current_style; function showButtons(style) { if (style == current_style) { return; } current_style = style; copy_button.style.display = style; copy_info.style.display = 'none'; } </script> ]=]; ret render(html); } // frame set ret render([[ <title>Pivo 1</title> <frameset rows="280,*"> <frame src="LINK/upper"></frame> <frame name="contentframe" src="LINK/empty"></frame> </frameset> ]]); } static S render(S html) { ret html.replace("LINK/", rawLink("")); }
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment