2012-03-24 10 views
13

Estoy buscando una manera de definir lo que espera que el usuario diga en una etiqueta <input> con el conjunto de atributos HTML 5 speech.
sé que se puede especificar una gramática específica a utilizar a través del atributo grammar, así:
<input type="text" speech grammar="grammar.grxml" />HTML5 Reconocimiento de voz --- ¿hay alguna manera de establecer lo que el usuario debe decir dinámicamente? (Usando Gramáticas personalizadas)

(ver http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html)

pero me esperaba una manera de hacer esta dinámica, por lo que puedo especificar lo que espero que el usuario diga a través de javascript.

Por ejemplo, si tiene una lista generada dinámicamente de elementos para que un usuario seleccione por voz, ¿cómo podría especificar que lo que diga será probablemente uno de esos elementos?

P.S. Estoy probando esto con Google Chrome, utilizando el atributo x-webkit-speech en lugar de speech y del mismo modo x-webkit-grammar en lugar de grammar.

+1

Enviaría la lista al servidor, el servidor devolvería un enlace al archivo de la gramática que contiene los elementos, y reemplazaría el valor del atributo gramman con el enlace que obtuve del servidor. Esto debería funcionar, pero no sé la manera de hacerlo completamente en el lado del cliente. – Tadeck

+0

Ni siquiera sabía que había una característica de este tipo en HTML 5, se ve muy bien. +1 para la pregunta –

+0

@JibiAbraham Sí, ¡y ahora hay una API api para ello! Lo siguiente que voy a investigar. http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API – Stephen

Respuesta

3

Encontré una manera de hacerlo desde el lado del cliente, usando una nueva característica html5: blobs.

window.URL = window.URL || window.webkitURL; 

var myGrammar = new Blob(["My custom grammar"], { 
    type: 'text/xml Or whatever is the proper MIME type for grammars'}); 

var grammarUrl = window.URL.createObjectURL(myGrammar); 

myInput = document.getElementById("myInput"); 

myInput.grammar = grammarUrl; 

Esto hace que una URL de la cadena de la gramática, y luego establece que la url de nuestro elemento input.

De esta manera no hay necesidad de hacer una solicitud de servidor, lo que hace que sea más rápido y menos carga en el servidor.

Para obtener más información sobre blobs, consulte this y this.

3

El archivo de la gramática se puede generar dinámicamente usando algo como PHP, JSP o su lenguaje de desarrollo web favorito. El archivo de gramática es inverosímil a través de HTTP por lo que podría tener algo como esto si está usando PHP:

<input type="text" speech grammar="grammar.php?some_var=foo" /> 

El PHP crearía dinámicamente la gramática basada en la información aprobada en una cadena de consulta o mediante almacenada la información de sesión y devolverlo al motor de voz.

Cuestiones relacionadas