Acudo a ustedes con la siguiente duda.
Recientemente me ha sido asignado la creación de un formulario en el cual todos los inputs pueden ser llenados tanto manualmente, como por reconociemiento de voz, para lo cual se estaba usando el WebSpeechAPI de google, introduciendo unicamente el comando x-webkit-speech="x-webkit-speech" en todos los Inputs del formulario, sin embargo, google ha retirado el soporte para esta acción debido a una vulnerabilidad encontrada hace unos meses.
El API sigue funcionando pero usando el siguiente metodo:
Les pongo este codigo a modo de ejemplo:
Codigo HTML
delphi
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="//code.jquery.com/jquery-1.10.2.js"></script> <script type="text/javascript" src="voice.js"></script> </head> <body> <button id="start_button" onclick="startButton(event)"><img id="start_img" src="mic.gif" alt="Start"></button> <input type="text" id="cuadro" name="cuadro" placeholder="Prueba"> </body> </html>
Codigo Javascript
delphi
var recognizing = false; if (!('webkitSpeechRecognition' in window)) { upgrade(); } else { //start_button.style.display = 'inline-block'; var recognition = new webkitSpeechRecognition(); recognition.continuous = false;//Me permite dejar encendido el microfono o apagarlo al terminar de hablar recognition.interimResults = false;//Me permite ver la edicion del texto o no recognition.onstart = function() { recognizing = true; //showInfo('info_speak_now'); start_img.src = 'mic-animate.gif'; }; recognition.onerror = function(event) { if (event.error == 'no-speech') { start_img.src = 'mic.gif'; //showInfo('info_no_speech'); ignore_onend = true; } if (event.error == 'audio-capture') { start_img.src = '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 = 'mic.gif'; 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); } if (create_email) { create_email = false; createEmail(); } }; recognition.onresult = function(event) { var interim_transcript = ''; for (var i = event.resultIndex; i < event.results.length; ++i) { if (event.results[i].isFinal) { final_transcript += event.results[i][0].transcript; } 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'); } var Nombre=final_transcript; $("#cuadro").val(Nombre); }; } //============================Desaparece los microfonos============================== function upgrade() { start_button.style.visibility = 'hidden'; //showInfo('info_upgrade'); } //=================================================================================== //============================Primera letra en mayuscula============================== var first_char = /\S/; function capitalize(s) { return s.replace(first_char, function(m) { return m.toUpperCase(); }); } //=================================================================================== function startButton(event) { if (recognizing) { recognition.stop(); return; } final_transcript = ''; recognition.lang = 'es-CO'; //selecciona el idioma y dialecto; recognition.start(); ignore_onend = false; //final_span.innerHTML = ''; //interim_span.innerHTML = ''; start_img.src = 'mic-slash.gif'; //showInfo('info_allow'); //showButtons('none'); start_timestamp = event.timeStamp; }
Para el reconociemiento de voz, se necesita de un boton que llame a una funcion y luego esta pone el resultado en el Input, pero el formulario que se esta desarrollando tiene mas de 100 Inputs los cuales todos deben ser llenados con reconocimiento de voz, se que debo crear un boton para cada input, pero, ¿como puedo modificar el Javascript anterior para evitar tener 100 funciones diferentes para todos los inputs?
Espero que puedan ayudarme.
Muchas gracias de antemano.
Salu2