Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <!--
- Author: Conal Mullan
- Created Date: 30-Sept-2014
- Description: HTML5 Speech Recogntion API as input for a JotForm form field
- API Docs: https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html
- Notes(30-sept-14): This API is only supported in Chrome at this point.
- Modification History:
- -->
- <html>
- <head>
- <script src="http://js.jotform.com/JotFormCustomWidget.min.js"></script>
- <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
- <style>
- #start_button {
- font-size: 14pt;
- }
- #transcript {
- color: darkred;
- font-size: 14pt;
- border: 3px solid #cccccc;
- padding: 2px;
- background-color:#F8E0EC;
- }
- #instructions {
- color: darkblue;
- font-size: 12pt;
- }
- .supported {
- background-color:#BCF5A9 !important;
- }
- </style>
- </head>
- <body>
- <span id="labelText"></span>
- <textarea rows="8" cols="50" id="transcript"> </textarea>
- <br>
- <div id="instructions"> </div>
- <div id="controls" style="display:none;">
- <!-- Language selection -->
- <select id="select_language" onchange="updateCountry()">
- <option value="0">Afrikaans</option><option value="1">Bahasa Indonesia</option><option value="2">Bahasa Melayu</option><option value="3">Català</option><option value="4">Ceština</option><option value="5">Deutsch</option><option value="6">English</option><option value="7">Español</option><option value="8">Euskara</option><option value="9">Français</option><option value="10">Galego</option><option value="11">Hrvatski</option><option value="12">IsiZulu</option><option value="13">Íslenska</option><option value="14">Italiano</option><option value="15">Magyar</option><option value="16">Nederlands</option><option value="17">Norsk bokmål</option><option value="18">Polski</option><option value="19">Português</option><option value="20">Româna</option><option value="21">Slovencina</option><option value="22">Suomi</option><option value="23">Svenska</option><option value="24">Türkçe</option>
- </select>
- <!-- dialect selection -->
- <select id="select_dialect" style="visibility: visible;">
- <option value="en-AU">Australia</option><option value="en-CA">Canada</option><option value="en-IN">India</option><option value="en-NZ">New Zealand</option><option value="en-ZA">South Africa</option><option value="en-GB">United Kingdom</option><option value="en-US">United States</option>
- </select>
- <button disabled="disabled" id="start_button">Click to start voice dictation</button>
- </div>
- <!-- VOICE RECOGNITION VIA WEB SPEECH API https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html -->
- <script type="text/javascript">
- var finalTranscript = '';
- var recognizing = false;
- $(document).ready(function() {
- // check that your browser supports the API
- if (!('webkitSpeechRecognition' in window)) {
- // Not Supported
- $('#instructions').html('Voice recognization not supported in your browser! - please suppy input via keyboard');
- //$('#start_button').html('Voice recognisation support disabled');
- } else {
- // We have a supported browser
- // Create the recognition object and event handlers
- $('#transcript').addClass('supported');
- $('#start_button').removeAttr('disabled');
- $('#controls').show();
- $('#instructions').html('Voice recognization enabled!');
- var recognition = new webkitSpeechRecognition();
- recognition.continuous = true; // keep processing input until stopped
- recognition.interimResults = true; // show interim results
- // grab the language/dialect from our input fields.
- recognition.lang = select_dialect.value;
- recognition.onstart = function() {
- recognizing = true;
- $('#instructions').html(' Please speak slowly and clearly');
- $('#start_button').html('Click to finish recording');
- };
- recognition.onerror = function(event) {
- console.log("There was a recognition error...");
- };
- recognition.onend = function() {
- recognizing = false;
- $('#instructions').html(' ');
- };
- recognition.onresult = function(event) {
- var interimTranscript = '';
- // Assemble the transcript from the array of results
- for (var i = event.resultIndex; i < event.results.length; ++i) {
- if (event.results[i].isFinal) {
- finalTranscript += event.results[i][0].transcript;
- } else {
- interimTranscript += event.results[i][0].transcript;
- }
- }
- console.log("interim: " + interimTranscript);
- console.log("final: " + finalTranscript);
- // update the page
- if(finalTranscript.length > 0) {
- $('#transcript').val(finalTranscript);
- recognition.stop();
- $('#start_button').html('Click to Start Again');
- recognizing = false;
- }
- };
- $("#start_button").click(function(e) {
- e.preventDefault();
- if (recognizing) {
- recognition.stop();
- $('#start_button').html('Click to Start Again');
- recognizing = false;
- } else {
- finalTranscript = '';
- // Request access to the User's microphone and Start recognizing voice input
- recognition.start();
- $('#start_button').html('Waiting');
- $('#instructions').html('Allow the browser to use your Microphone');
- $('#transcript').val('');
- }
- });
- }
- });
- <!-- languages & dialect selection -->
- var langs =
- [['Afrikaans', ['af-ZA']],
- ['Bahasa Indonesia',['id-ID']],
- ['Bahasa Melayu', ['ms-MY']],
- ['Català', ['ca-ES']],
- ['Ceš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âna', ['ro-RO']],
- ['Slovencina', ['sk-SK']],
- ['Suomi', ['fi-FI']],
- ['Svenska', ['sv-SE']],
- ['Türkçe', ['tr-TR']],
- ['Lingua latina', ['la']]];
- for (var i = 0; i < langs.length; i++) {
- select_language.options[i] = new Option(langs[i][0], i);
- }
- // lets default to U.S English
- select_language.selectedIndex = 6; // English
- updateCountry();
- select_dialect.selectedIndex = 6; // United States
- 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';
- }
- </script>
- <!-- JOTFORM WIDGET INTEGRATION - http://developers.jotform.com/widgets -->
- <script type="text/javascript">
- var label = JFCustomWidget.getQueryString('testing');
- document.getElementById('labelText').innerHTML = label;
- JFCustomWidget.subscribe("ready", function(){
- //subscribe to form submit event
- JFCustomWidget.subscribe("submit", function(){
- // Check field for content then pass to JotForm
- if ($("#transcript").val().length == 1)
- {
- // doesnt look like their is anything in the field.
- $('#instructions').html('The field is empty. Please supply some input!');
- // unable to prevent the form submitting on invalid data
- // needs a little work here
- return;
- }
- else
- {
- var msg = {
- valid: true,
- value: $("#transcript").val()
- }
- // send to JotForm
- JFCustomWidget.sendSubmit(msg);
- }
- });
- });
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement