Your SlideShare is downloading. ×
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
20001121 Introducción a VoxML
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

20001121 Introducción a VoxML

199

Published on

Artículo publicado en 2000 en el site WMLClub explicando el funcionamiento del lenguaje VoxML y las posibilidades del desarrollo de aplicaciones de voz.

Artículo publicado en 2000 en el site WMLClub explicando el funcionamiento del lenguaje VoxML y las posibilidades del desarrollo de aplicaciones de voz.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
199
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1Publicado en el WMLClub en Octubre de 2000INTRODUCCION A VOXMLPor Santiago Márquez Solís 1.- INTRODUCCION A VoxML Después del último artículo en el cual nos introducíamos en la tecnología ASP para usarla dentro de nuestros desarrollos en WML vamos a adentrarnos en este nuevo artículo en un tema que a buen seguro será del interés de todos vosotros ya que añadirá a vuestras aplicaciones una nueva dimensión, estamos hablando de la posibilidad de hacer aplicaciones de voz, sin lugar a dudas una característica que dará que hablar y nunca mejor dicho en los próximos meses ya que posibilita que nuestros programas interactúen a través de un elemento tan cotidiano y fácil de usar por todos nosotros como es la propia voz. Para ello en este artículo vamos a familiarizarnos con un lenguaje que la mayoría de vosotros conoceréis de nombre que es el VoxML, para ello vamos a explicar su estructura así como todos los elementos claves que incorpora para hacer realidad que nuestros programas funcionen gracias a la voz, en este estudio será muy importante acercarnos al Microsoft Speech API o SAPI, que es el motor que posibilita que todo funcione y en el que se basa el ADK de Motorola en cuanto a funciones de voz se refiere. Y sin más pasemos a ver que es esto del VoxML. 2.- EL MOTOROLA ADK En primer lugar y antes de nada tenemos que centrar el entorno de trabajo que vamos a necesitar para poder desarrollar nuestra primera aplicación de voz. Para hacer uso de VoxML vamos a utilizar una interfaz de desarrollo de la que hablamos en un articulo anterior, nos estamos refiriendo al Motorola ADK y que os recomiendo si queréis profundizar en este entorno que leáis el artículo publicado en el club en la siguiente dirección: http://www.wmlclub.com/articulos/motorolaadk.htm El artículo anterior se centra en las posibilidades del entorno dentro de la versión 1.1 del ADK no obstante en el Web de Motorola (http://www.motorola.com) tenéis la posibilidad de bajaros la versión 2.0 del ADK la cual está más orientada al desarrollo de este tipo de aplicaciones si cabe. Hay un aspecto que se me olvido mencionar en el artículo sobre el ADK y es que si queréis hacer uso de la versión 2.0 deberéis de incluir durante el proceso de instalación del programa el número de serie del mismo, en principio este número de serie os lo envía Motorola cuando os registráis a vuestra dirección de correo pero en el caso de que no os llegue podéis pedirlo directamente a Motorola enviando un email a la siguiente dirección de correo indicando que os envíe el número de serie del programa: developersupport@motorola.com En este artículo vamos a hacer uso de la versión 1.1 aunque repito la versión 2.0 presenta un entorno más preparado para el desarrollo de aplicaciones VoxML que la versión 1.1. 3.- EL SAPI DE MICROSOFT Antes de adentrarnos dentro del lenguaje VoxML propiamente dicho vamos a pararnos en un conjunto de utilidades que son tan importantes como el propio lenguaje VoxML ya que sin ellas el soporte de voz que implementa VoxML no sería posible, estamos refiriéndonos al Microsoft Speech Aplication Interface o SAPI. Este conjunto de utilidades no es más que un conjunto de librerías que bajo el nombre genérico de Agentes sirven como interfaz de programación para el desarrollo de aplicaciones de voz, es decir, cuando estamos utilizando alguna de las múltiples funciones que están definidas dentro de VoxML el soporte para que nuestro ordenador pueda “hablar” o “entender” lo que decimos viene proporcionado por los agentes que componen el SAPI de Microsoft. Es importante señalar que VoxML no hace uso de todos los agentes que componen el SAPI sino solo alguno de ellos que son los que se instalan cuando procedemos a instalar el ADK concretamente se instalan los siguientes agentes:  Lernout & Hauspie TruVoice Amer. Eng TTS Engine  Merlin 1
  • 2.  Microsoft Speech Control Panel  Microsoft Command & Control EngineActualmente la versión del SAPI de Microsoft se encuentra en su versión 5.0 aunque estáversión está aún en fase de beta, si queréis obtenerla junto con su documentación solo tenéisque descargarla desde la siguiente dirección e ir al área de descarga:http://www.microsoft.com/speech/El mayor inconveniente que debemos saber antes de continuar con nuestro estudio es que elSAPI de Microsoft solo se encuentra disponible en Ingles y por tanto las aplicaciones quehagamos en VoxML, de momento, deberán ser exclusivamente para este idioma. Este problemase reduce si las aplicaciones que desarrollemos son para grupos de personas cuyo idiomacomún es el ingles, como sucede en muchas empresas en las que es el lenguaje corporativo, noobstante es un inconveniente que va a limitar el número de usuarios que van hacer uso denuestros desarrollos.3.1.- CONFIGURACION DE LOS AGENTES DE MICROSOFT USADOS EN EL MOTOROLAADKAunque ya lo referimos en el artículo sobre el ADK no está de más hacer un pequeño y breverepaso a la instalación de los agentes, si recordáis del artículo sobre el ADK la instalación delprograma podía hacerse o bien desde un único fichero (fichero MobileADK.exe) o bien desdevarios (MobileADK_Only y MobileADK_Agents.exe) independientemente del modo de instalaciónsucedía que durante dicho proceso si queríamos hacer uso posteriormente de las opciones paradesarrollar aplicaciones que hagan uso de la tecnología VoxML hay que configurarcorrectamente las opciones de voz de nuestro micrófono en una secuencia de pantallas deconfiguración (ver las figuras siguientes) a las que se llega cuando realizamos la instalación delos agentes y en las cuales hay que configurar los siguientes aspectos: o Tipo de salida de audio que tenemos es decir, altavoces (speakers) o auriculares (headphones), adicionalmente podemos hacer una prueba para ver si funciona correctamente y seleccionar el volumen (figura 1) o Tipo de micrófono, en este caso tenemos unas cuantas posibilidades, y podemos elegir entre micrófonos de sobremesa, los que van fijados a los auriculares, o bien los más modernos que van incorporados en el monitor o incluso en el teclado de la máquina. Aparte en esta pantalla tenemos un botón (Buying a Microphone) en el que si presionamos nos dan una serie de recomendaciones para la compra de un micrófono (figura 2). 2
  • 3. Una vez que se ha indicado el tipo de micrófono del que disponemos, elsistema trata de evaluar la calidad del mismo mediante el dictado de unafrase, para hacer este dictado se nos recomienda que el lugar donde nosencontremos se encuentre lo más silencioso posible para evitar que seproduzcan interferencias que puedan mermar la calidad de la grabación de lafrase (Figura 3 y 4) 3
  • 4. Finalmente cuando el proceso de instalación de los agentes de Microsoft termina tenemos dentro del Panel de Control de Windows un nuevo elemento denominado Speech que nos permite acceder a las propiedades de los dispositivos de entrada y salida de voz. 3.2.- CONFIGURACION DEL SPEECH En el punto anterior recordamos brevemente el proceso de instalación de los agentes de Microsoft que están incluidos con el ADK de Motorola y decíamos que todo el proceso finalizaba con la creación de un elemento denominado Speech dentro del Panel de Control de Windows que nos va a permitir manipular la configuración del micrófono (Ver figura 5) En el artículo sobre el ADK no nos detuvimos en las posibilidades que tenía el Speech en cuanto a configuración se refiere ya que su explicación está más justificada en este artículo donde realmente va a resultarnos muy útil. Si nos fijamos en la figura veremos que el Speech muestra información sobre el Engine (motor) de manipulación de voz en dos aspectos distintos: la salida (Speech Output) y la entrada (Speech Input), en la parte inferior de la ventana tenemos una serie de botones que nos van a permitir modificar los distintos parámetros del Speech y configurarlo a nuestro gusto.1. Speech Output: Como su nombre indica se está refiriendo a la salida de los elementos de vozque se emitan al usuario. Si nos posicionamos sobre True Voice se nos activaran los botonesinferiores que nos permitirán lo siguiente: 4
  • 5.  Botón Pronuntiation: Nos permite incluir palabras (ver figura 6) y comprobar como sonarían, aparte nos muestra la pronunciación de dichas palabras de manera escrita (los fonemas) en pantalla (en el cuadro de texto Pronuntiation) y podemos configurar nosotros palabras para que suenen de un determinado modo. Desde el botón "Examples" accedemos a una lista de fonemas que el Speech puede reconocer y que podemos insertar para componer el "sonido" de nuestra palabra. Con el botón "Add" añadimos una palabra a nuestra "Word List" de manera que podemos recuperarla posteriormente si queremos. Botón Properties: Nos permite modificar las características de velocidad, timbre y volumen de las voces que tenemos instaladas (figura 7 y figura 8), desde la ventana de propiedades también tenemos un botón que nos lleva a las opciones de Pronuntiation que veíamos antes. 5
  • 6. 2.- Speech Input: Como su nombre indica se está refiriendo a la entrada de loselementos de voz que emita el usuario. Si nos posicionamos sobre True Voice se nosactivaran los botones inferiores que nos permitirán lo siguiente:  Boton Properties: Nos permite determinar el nivel del tiempo de respuesta en el reconocimiento de las palabras con respecto a dos parámetros distintos el acierto en el reconocimiento y el fallo en el reconocimiento, es decir modificando los distintos valores podemos hacer que el sistema se toma más tiempo en el reconocimiento de la palabra por lo cual el fallo es menor o mayor en función de hacia donde desplacemos la barra superior. Con la barra inferior podemos indicar que es lo que esperamos del sistema en el sentido siguiente: si seleccionamos "Fewer False Rejections" tomaremos como buenas palabras que son errores (mal pronunciadas por ejemplo y que se asemejan a otras) y si seleccionamos "Fewer False Recognitions" tomaremos como malas palabras que son buenas ya que estamos forzado un nivel de pronunciación muy riguroso. 6
  • 7.  Boton Pronuntiation: Nos permite ajustar la pronunciación de un modo similar al caso de la salida de audio que veíamos antes pero ahora para la entrada. El funcionamiento es diferente al caso anterior, en este caso escribimos la palabra queremos modificar/añadir/borrar y hacemos clic en el botón de Siguiente, en la nueva pantalla podemos pasar a configurar los fonemas que compondrán la palabra y almacenarla en el diccionario de manera que podemos hacer uso de ella posteriormente. Hay que señalar que cuando hacemos cambios en los fonemas de una palabra y grabamos los cambios se nos pide si queremos notificar a Microsoft (figura) de estos cambios para que los tenga en cuenta en futuras versiones del producto. 7
  • 8.  Botón Adjust Microphone Settings: Desde este botón accedemos al asistente para configurar el micrófono que veíamos en el punto 3.1 sobre la instalación y configuración de los asistentes.Para finalizar con el estudio del Speech recordar que dentro del editor del ADK todosestos elementos quedan reflejados por la aparición de un curioso personaje llamadoMerlin, que es la representación "física" de todo lo que estamos viendo y que será elencargado de hablar los contenidos de las aplicaciones que desarrollemos y deentender lo que digamos al sistema, en la figura vemos a este curioso elemento:4.- EL LENGUAJE VoxMLVoxML está basado en XML y se puede decir que es una variante del voiceXML (VoiceeXtensible Markup Language) y sus especificaciones las dirige el VoiceXML Forumcreado por AT&T, IBM, Motorola y Lucent Technologies.), y su objetivo es el deproporcionar a los desarrolladores de aplicaciones móviles una herramienta para crearaplicaciones cuya elemento fundamental de trabajo sea la voz, de modo que lanavegación, la entrada de datos e incluso la salida se basen en este elemento.Como en cualquier otro lenguaje de programación cada vez que iniciamos un nuevoproyecto debemos de seguir una serie de pasos que nos permitan determinar de unmodo u otro el esquema básico que nuestra aplicación tendrá, este aspecto es algoque todo programador sabe de su importancia ya que resulta fundamental para hacerun código estable y reutilizable en un futuro, es por tanto que el punto de partida deestudio de VoxML debe ser este mismo punto: la manera en la que las aplicaciones devoz deben de diseñarse para obtener el resultado esperado.En este caso hay una serie de preguntas que debemos de hacernos y queposteriormente trataremos de identificar en un ejemplo que desarrollaremos poco apoco, entre otras cuestiones tenemos que identificar lo siguiente: - Tipo de servicio que estamos desarrollando o que queremos desarrollar. - Los datos que disponemos en el sistema actualmente si existen por su puesto. - El conjunto mínimo de entradas requeridas por el usuario. - Las salidas que el sistema debe devolver. - Tiempo aceptable de respuesta del sistema. - Identificar el mejor método de dialogo con el usuario en función de sus características, es decir, orientar el sistema hacia el usuario final que al fin y al cabo es el que va a tener que utilizarlo.Otro aspecto fundamental en el desarrollo de las aplicaciones en VoxML y que nosayudara en la codificación es escribir el diagrama de estado de la aplicación, en el cualse determina las distintas situaciones por las cuales puede evolucionar nuestroprograma de manera que indiquemos los estados, transiciones, validaciones deentrada en definitiva al hacer este diagrama obtendremos lo que se puede pasar adenominar Secuencia de Dialogo con el usuario: 8
  • 9. 4.1.- DIALOGS Y STEPSLos elementos fundamentales que componen una aplicación escrita en VoxML sonsolamente dos al igual que sucede en WML, si en éste los dos elementos básicos sonlas barajas y las cartas, en VoxML son el DIALOG y el STEP, que proporcionan laestructura elemental a cualquier aplicación.Como sucede con el tag <WML> con DIALOG definimos el alcance del documento(aplicación) VoxML de tal modo que cualquier otro elemento que incluyamos dentro denuestro documento estará delimitado por los tags<DIALOG> y </DIALOG>. Por otraparte el elemento STEP nos va a definir un estado de nuestra aplicación de igual modoque el elemento CARD nos define una pantalla en WML. Este estado siemprerepresenta un dialogo interactivo entre la aplicación y el usuario y siempre lanavegación va a producirse entre diferentes STEP como resultado de las respuestas delusuario a las preguntas que plantee el programa. En el siguiente ejemplo tenéis elesqueleto que presentaría una aplicación VoxML típica: <?xml version="1.0"?> <DIALOG> <STEP NAME="init"> <!-Codigo del Step --> </STEP> </DIALOG>Como podéis ver por el fragmento de código anterior la estructura es muy parecida ala de WML, aunque cambia un poco la definición del tipo de documento XML siendo unpoco más abreviada pero es una línea obligatoria que no podemos omitir. Por otraparte los comentarios en el código del programa siguen la sintaxis de siempre por loque no tenemos que aprender en este apartado nada nuevo. Como sucede en otroslenguajes como HTML o WML los tags que tenemos pueden variar su comportamientopor la inclusión dentro de la etiqueta de modificadores (atributos) particulares paracada tipo de etiqueta, los cuales siempre presentan una sintaxis muy similar a lasiguiente:<TAG Atributo=Valor> Elementos dentro del TAG </TAG>En VoxML hemos dicho que los elementos fundamentales son el DIALOG y el STEP,pues bien siempre que una aplicación comienza su ejecución el terminal comienza laejecución por aquel STEP cuyo modificador NAME tiene el valor de "init" (enminúsculas siempre), este modificador NAME se utiliza para asignar un nombre lógicoa los distintos STEP que forman parte de nuestro documento VoxML. Es importanteseñalar que no importa el lugar que ocupe el STEP init dentro del código, puede ser elprimero que aparezca o el último pero siempre debe de aparecer.El tag DIALOG solo tiene un atributo que debemos conocer, es el BARGEIN el cualpuede tomar dos valores "Y" o "N", y su finalidad es la de interrumpir la lectura de loselementos del STEP en caso que el usuario diga algo (valor "Y").En el caso del STEP además del atributo NAME que veíamos antes tenemos otro muyinteresante ya que nos permite agrupar conjuntos de STEP dentro de una misma clase(esto lo veremos más adelante cuando veamos el tag CLASS) este tag es eldenominado PARENT y nos va a servir para indicar a que clase (CLASS) pertenece unSTEP determinado.4.2.- PROMPT, HELP E INPUTOtros elementos básicos que van a formar parte de las aplicaciones VoxML en un altoporcentaje, son los tags PROMPT, HELP e INPUT que vamos a ver a continuación y queya nos permitirán elaborar un pequeño ejemplo ilustrativo de todo lo que hemos vistohasta este momento. · PROMPT: Este elemento se utiliza para definir el contenido que se presentará al usuario cuando entra dentro de un STEP determinado. La sintaxis de este tag es la siguiente: <PROMPT>Texto </PROMPT> 9
  • 10. El texto que introduzcamos entre los dos tags va a ser leído por el Speech(recordar que este elemento se representara en el ADK como Merlin). Noobstante la lectura que el Speech va a realizar puede modificarse pordiferentes elementos del lenguaje VoxML que veremos un poco más adelantecomo son los tags EMP, PROS, AUDIO etc.· HELP: Es otro elemento que vamos a utilizar para definir el contenido de unSTEP y que junto con PROMPT servirán de guía al usuario para el manejo dela aplicación. El tag HELP se ejecuta siempre que el usuario pide ayuda alsistema bien diciendo "Help" o en alguna frase que contenga dicha palabracomo por ejemplo "I need Help" o frases similares. Si no definimos un HELPpara un STEP determinado el sistema utiliza uno por defecto que consiste enparar la ejecución del PROMPT que se este leyendo en ese momento y acontinuación emitir el mensaje: "No help is available" (No hay ayudadisponible), es por tanto aconsejable definir los distintos niveles de ayuda quecada STEP pueda necesitar a fin de facilitar al usuario el uso de la aplicación.La sintaxis básica de HELP es la siguiente: <HELP Atributos> Texto </HELP>Los atributos más interesantes de HELP son ORDINAL que indica el mensajeque debe de usarse en repetidas llamadas a HELP por parte del usuario, nohay límite en el número que puede indicarse a ORDINAL. Por otro ladotenemos a REPROMPT que puede tomar dos valores Y o N y que sirve paraindicar que el mensaje de ayuda debe ser el contenido del PROMPT del STEPen el que nos encontramos, el valor por defecto para este atributo es N.Un ejemplo de HELP para clarificar sus posibilidades lo vemos a continuación: <STEP NAME=Ayuda"> <HELP REPROMPT="Y">We hear the prompt again</HELP> <HELP ORDINAL="2">Second help message </HELP> <HELP ORDINAL="3">Third help message</HELP> </STEP>· INPUT: Este tag tiene una misión muy importante dentro de VoxML ya quesirve para definir las entradas que un usuario puede dar al sistema. Loselementos INPUT solo se pueden encontrar dentro de los tags STEP y nuncafuera de ellos. Hay diferentes tipos de tags INPUT que varían en función deltipo de entrada que se espere del usuario, es decir, no es lo mismo unaentrada de una texto que de un valor numérico o de una fecha, en el cuadrotenéis todos los tipos de INPUT que pueden definirse en VoxML. Para indicarque una entrada es de un tipo o de otro tenemos el atributo TYPE en el queindicamos uno de los valores del cuadro. Tipos de INPUT en VoxML DATE : El usuario va a introducir una fecha al sistema DIGITS : El usuario va a introducir dígitos al sistema del 0 al 9, por ejemplo cuando marcamos el PIN del móvil. HIDDEN : Se utiliza para asignar un valor a una variable en VoxML sin intervención por parte del usuario. MONEY : El usuario va a introducir una cantidad monetaria NONE : Se utiliza en unión con el tag NEXT para indicar la siguiente localización a la que debe de ir la ejecución del programa NUMBER : El usuario va introducir un numero, VoxML reconoce en este caso cantidades no negativas y enteras de hasta 24 dígitos. OPTIONLIST: Se utiliza para indicar un conjunto de posibles opciones de las cuales el usuario debe de elegir una. PHONE : El usuario va introducir un número de teléfono TIME : El usuario va introducir una hora YORN : Se utiliza para recoger respuestas del usuario del tipo "Yes" o "No" 10
  • 11. Dentro del tag INPUT existe un atributo muy importante que es el atributo NEXT quesirve para indicar el siguiente STEP a ejecutar cuando el usuario diga la opcióncorrespondiente al INPUT.4.3.- OTROS ELEMENTOS DEL LENGUAJE VOXMLAparte de los tags que veíamos en el punto anterior existen otros elementos queconviene conocer para usarlos en nuestros desarrollos: · BREAK: Se utiliza para insertar una pausa dentro del texto que se esta presentando al usuario. Contiene un atributo llamado MSECS que indica los milisegundos que se deben de hacer de pausa. Otra manera de hacer esto mismo es mediante el atributo SIZE que puede tomar cualquiera de los siguientes valores NONE (sin pausa), SMALL (pausa pequeña), MEDIUM (pausa media) o LARGE (pausa grande). Ejemplo: <PROMPT> Welcome to VoxML <BREAK MSECS="20"/> Are you OK? </PROMPT> · ACK: Se utiliza como mecanismo para proporcionar una doble validación de los datos que el usuario introduce en el sistema sin el elemento ACK tendríamos que crear dos STEP distintos uno para recoger la primera entrada y el otro para validarla, por tanto el uso de ACK es para ahorrar este tipo de construcciones. Por ejemplo: <STEP NAME="TiposCoche"> <PROMPT> What car do you have? </PROMPT> <INPUT NAME="Tipos" TYPE=OPTIONLIST NEXT="#OtroStep" <OPTION VALUE="Ford">Ford</OPTION> <OPTION VALUE="Daewoo">Daewoo</OPTION> <OPTION VALUE="Renault">Renault</OPTION> </INPUT> <ACK CONFIRM="YORN">Your car is:<VALUE NAME="Tipos"/> Is correct?</ACK> </STEP> Este tag admite el atributo CONFIRM cuyo único valor puede ser YORN (es decir, "Yes" o "No" como respuesta por parte del usuario) · EMP: Sirve para modificar la entonación (enfatizar) un determinado texto que va a ser leído por el Speech. Contiene un único atributo llamado LEVEL que sirve para indicar dicho nivel de entonación y cuyos valores son los siguientes: NONE (sin entonación), REDUCED (entonación baja), MODERATE (entonación media) y STRONG (entonación fuerte). Por ejemplo: <PROMPT> Today <EMP>will be</EMP> the first day of the rest of my life </PROMPT> Las palabras "will be" sería pronunciadas con un énfasis mucho mayor que el resto de la frase. · PROS: Al igual que sucede con EMP con este tag podemos cambiar los parámetros del texto que el Speech emite, concretamente podemos modificar el volumen, las palabras por minuto así como la frecuencia, para hacer esto disponemos de los siguientes atributos RATE (indica la frecuencia de palabras por minuto (135 es normal y 300 muy rápido), VOL (volumen entre 0.0 que indica el silencio y 1.0 que es el volumen más alto), PITCH y RANGE sirven para modificar el timbre de la voz y el tono. En el caso del PITCH una voz femenina se encuentra entre los 140 y 280 hz y la de un hombre entre 70 y 140 Hz, para el RANGE tenemos que las mujeres estan por encima de los 80 Hz y los hombres entre 40-80 Hz. · AUDIO: Es otro de los elementos interesantes de VoxML y sirve para que en vez de obtener como resultado por parte del sistema la lectura del texto 11
  • 12. incluido en una tag PROMPT, obtengamos como salida el contenido de unfichero de voz (.wav o .voc). Es una posibilidad muy interesante ya quepodemos tener fragmentos de noticias o cualquier otro tipo de información enun fichero de este tipo y podemos oírlo en su estado original sin necesidad detener que hacer nada más con él. Un ejemplo lo tenemos en el siguientecódigo: <PROMPT> And the president says: <AUDIO SRC="http://localhost/president.wav></AUDIO> </PROMPT>El atributo SRC sirve para indicar la localización del fichero dentro delservidor.· GOODBYE: Este tag sirve para indicar que debe de suceder cuando elusuario dice "GoodBye" o "Bye" en el sistema. Generalmente cuando se diceesta palabra se fuerza a la finalización de la ejecución del DIALOG y de lasesión del usuario, sin embargo si hacemos el uso de este tag podemosmodificar el comportamiento por defecto del sistema. El tag GOODBYEpresenta dos atributos a saber: ORDINAL que indica la secuencia de acción aejecutar por cada "Goodbye" que el usuario dice en el sistema y REPROMPTcon el significado que ya hemos visto, es decir si vale Y al el texto del tagGOODBYE se corresponderá con el del PROMPT del tag y si vale N podemosañadir nosotros un texto adicional. En el siguiente ejemplo de GOODBYE senos pide nuestro PIN, si decimos "Goodbye" la primera vez se nos muestra unmensaje en el que se nos avisa que si volvemos a decir adiós abandonaremosla aplicación, fijaros en el uso del atributo ORDINAL para marcar el orden enel que se ejecutarán los distintos tags: <STEP NAME="PIN">> <PROMPT>Enter your PIN number</PROMPT> <INPUT TYPE="DIGITS" NAME="InsertDigit"> <GOODBYE ORDINAL="1" REPROMPT="N">Say goodbye to exit or enter your PIN number</GOODBYE> <GOODBYE ORDINAL="2" NEXT="#hangup">Operation abort by the user. Nice day </GOODBYE> </STEP>· CANCEL: Sirve para definir que debe suceder cuando el usuario envía unapetición de cancelación sobre el STEP que actualmente se está procesando. Sino se define un CANCEL para un determinado STEP se utiliza uno por defectoque finaliza el PROMPT que actualmente se está leyendo y pasa a procesar losdistintos INPUT que haya definidos para el STEP en cuestión. Para invocar aCANCEL el usuario solo debe de decir "Cancel" o "I would like cancel" o frasessimilares. CANCEL lleva asociado el atributo NEXT que indica el STEP quedebe ejecutarse al producirse el CANCEL.· CASE y SWITCH: Estos dos tags se utilizan para controlar el flujo de laaplicación en función de las variables internas de VoxML. La sintaxis es muysimilar que en otros lenguajes de programación y queda reflejada en elsiguiente ejemplo: <SWITCH FIELD="Marca"> <CASE VALUE="Ford" NEXT="Ford"> <CASE VALUE="Daewoo" NEXT="Daewoo"> </SWITCH>En función del valor que tome la variable Marca el flujo del programa seguirápor el STEP Ford en caso de que Marca="Ford" o por el STEP Daewoo en casode que la Marca="Daewoo".· CLASS: Sirve para definir conjuntos de elementos que pueden serreutilizados dentro del contexto de un mismo DIALOG. La ventaja de lasclases estriba en que pueden ser heredadas por otros STEP y por otros CLASSque definamos posteriormente. Para poder heredar los CLASS que hayamos 12
  • 13. definido disponemos del atributo PARENT que dentro del STEP o de los CLASS sirven para indicar el elemento del que heredan. Elementos típicos que se heredan desde clases son los tag HELP, CANCEL etc. A continuación tenemos un ejemplo: <CLASS NAME="simple"> <HELP> Your choices are <OPTIONS/> </HELP> </CLASS> <STEP NAME="Peliculas" PARENT="simple"> <PROMPT> Please choose a film. </PROMPT> <INPUT NAME="films" TYPE="OPTIONLIST"> <OPTION NEXT="#film1"> LA Confidential </OPTION> <OPTION NEXT="#film2"> Independence Day </OPTION> </INPUT> </STEP> <STEP NAME="Libros" PARENT="simple"> <PROMPT> Please choose a book. </PROMPT> <INPUT NAME="books" TYPE="OPTIONLIST"> <OPTION NEXT="#book1"> IT </OPTION> <OPTION NEXT="#book2"> Wars and Peace </OPTION> </INPUT> </STEP>Si os fijáis en el ejemplo anterior tenemos una clase llamada "simple" que es la clasepadre para los dos STEP "Películas" y "Libros" ambos heredan el HELP de la clasesimple y en caso de que pidamos ayuda obtendremos el mensaje de "Your choises are:".4.4.- UN EJEMPLO COMPLETO DE VOXMLEn este momento tenemos todos los elementos necesarios para elaborar unaaplicación en VoxML completa, en este caso vamos a hacer una aplicación que nos va aservir para informarnos sobre los distintos modelos de coches de los que hay en uncatalogo, para ello vamos a movernos por las distintas secciones que componennuestro pequeño concesionario virtual y vamos a elegir aquel coche que nos interesepara ver sus características básicas.Si recordáis decíamos antes que el primer paso para elaborar una aplicación de voz esdeterminar la secuencia de dialogo de la aplicación, en este caso podemos determinarque es la siguiente: 13
  • 14. Por simplificar no hemos incluido más que tres marcas de coches y en cada marca solodos modelos, si nos fijamos la secuencia de ordenes que el sistema debe de irinterpretando y devolviendo es muy sencilla: después del saludo inicial se nospregunta por el tipo de marca que queremos consultar para una vez introducidanuestra selección volver a preguntar por el modelo de la marca en cuestión. Al elegirloel sistema nos describirá las características de dicho modelo. En nuestro caso elsiguiente paso será volver a la pantalla de saludo o bien abandonar la aplicación peroel ejemplo es lo suficientemente abierto como para enlazarlo con otra tecnología (porejemplo ASP) y permitir comunicación con base de datos y poder elaborar un sistemade compra de vehículos automatizado totalmente y a través del móvil (aunque seguroque a todos nos gustara primero ver el coche in situ).Siguiendo con el desarrollo de la aplicación vamos a explicar brevemente comodeberíamos de preparar el ADK para iniciar una aplicación en VoxML. Cuando vimos elADK en el artículo anterior comentamos que la estructura que debían de seguirnuestros trabajos en WML se basaban en el concepto de proyecto, esta política siguesiendo válida para VoxML, por lo que para hacer uso de este ejemplo lo primero quedebemos de hacer es crear un nuevo proyecto, seleccionando su nombre y carpeta 14
  • 15. donde se almacenará el código que elaboremos y seleccionar como tipo de proyectoVoxML (ver figura), de esta manera el propio ADK nos elaborará un esqueleto básicocon el cual podemos comenzar (ver figura)La versión 1.1 no nos muestra resaltado los distintos tags de los que consta VoxML (laversión 2.0 si lo hace) pero podemos chequear la sintaxis del programa si nos vamos ala opción de menú Tools/Check Sintax. Una vez que el programa este terminado y librede errores no olvidéis poner el UIS en modo VoxML ya que si no, no podremos accedera la aplicación, para hacer esto lo único que hay que hacer es seleccionar VoxMLdentro de las Settings del UIS.El código de la aplicación es el que tenéis a continuación, fijaros en la utilización de loselementos que describimos antes como están usados dentro del programa a fin de quetodo quede mucho más claro:<?xml version="1.0"?><DIALOG> <CLASS NAME="help_generic"> <HELP> Your possibles choices are <OPTIONS/>. </HELP> </CLASS> <STEP NAME="init" PARENT="help_generic"> <PROMPT> Welcome to cars demo program. Choose a car, or say Main Menu to return to the main menu. </PROMPT> 15
  • 16. <INPUT TYPE="OPTIONLIST"> <OPTION NEXT="#bmw"> bmw </OPTION> <OPTION NEXT="#volvo"> volvo </OPTION> <OPTION NEXT="#mercedes"> mercedes </OPTION> <OPTION NEXT="top.vml#top"> main menu </OPTION> </INPUT></STEP><STEP NAME="bmw" PARENT="help_generic"> <PROMPT> What is your favorite model five serie or seven serie </PROMPT> <INPUT TYPE="OPTIONLIST"> <OPTION NEXT="#five"> five serie </OPTION> <OPTION NEXT="#seven"> seven serie </OPTION> </INPUT></STEP><STEP NAME="five" PARENT="help_generic"> <PROMPT> This serie has tree models 520, 530 and 540. The price is over seven millions of pesetas and drive one of this cars its a pleasure for the senses <BREAK SIZE="LARGE"/> </PROMPT> <INPUT TYPE="NONE" NEXT="#init"/></STEP><STEP NAME="seven" PARENT="help_generic"> <PROMPT> Seven serie it is the most luxury BWM. This car is excellent for long travells. <BREAK SIZE="LARGE"/> </PROMPT> <INPUT TYPE="NONE" NEXT="#init"/></STEP><STEP NAME="volvo" PARENT="help_generic"> <PROMPT> What is your favorite model S serie or C serie </PROMPT> <INPUT TYPE="OPTIONLIST"> <OPTION NEXT="#S"> S serie </OPTION> <OPTION NEXT="#C"> C serie </OPTION> </INPUT></STEP><STEP NAME="S" PARENT="help_generic"> <PROMPT> The most important model in this serie is the S40 model. With near two meters of with this car is one of the most security cars in its category. <BREAK SIZE="LARGE"/> </PROMPT> <INPUT TYPE="NONE" NEXT="#init"/></STEP><STEP NAME="C" PARENT="help_generic"> <PROMPT> The C serie has cars for people that like velocity. The car more important is Volvo C70, a coupe car with a monster in its engine. <BREAK SIZE="LARGE"/> </PROMPT> <INPUT TYPE="NONE" NEXT="#init"/></STEP><STEP NAME="mercedes" PARENT="help_generic"> <PROMPT> What is your favorite model S serie or C serie </PROMPT> <INPUT TYPE="OPTIONLIST"> <OPTION NEXT="#SM"> S serie </OPTION> 16
  • 17. <OPTION NEXT="#CM"> C serie </OPTION></INPUT></STEP><STEP NAME="SM" PARENT="help_generic"><PROMPT> This is the best serie from Mercedes, a good car in security, elegance, is a car forspecial people.<BREAK SIZE="LARGE"/></PROMPT><INPUT TYPE="NONE" NEXT="#init"/></STEP><STEP NAME="CM" PARENT="help_generic"><PROMPT> The C serie is a great car for all people likes drive a Mercedes. A good choice for anew car. a coupe car with a monster in its engine.<BREAK SIZE="LARGE"/></PROMPT><INPUT TYPE="NONE" NEXT="#init"/></STEP></DIALOG>En el ADK la aplicación presenta un aspecto similar al siguiente (figura):Como podéis ver por las pantallas anteriores Merlin en primer lugar nos da labienvenida y nos indica que seleccionemos el tipo de modelo del que queremosobtener información. Si pedimos ayuda en cualquier momento se nos indicará enfunción del STEP en el que nos encontremos las opciones que tenemos disponibles. Enel ADK tenéis en el UIS (User Interface Simulator) en la parte inferior la posibilidad deseleccionar las diferentes respuestas que podemos dar a Merlin si no queremos haceruso del micrófono. 17
  • 18. 5.- CONCLUSIONESPoco a poco vamos analizando las tecnologías más vanguardistas que dentro delmundo WAP van apareciendo y a las que el desarrollador de aplicaciones móviles nopuede dejar indiferente, si en el artículo sobre ASP indicábamos la importancia de laspáginas interactivas y dinámicas como parte fundamental para un desarrollo de calidaden este artículo hemos demostrado que dicha afirmación es aun más cierta cuando nosponemos a desarrollar para un "elemento" tan flexible como es la voz humana, el usode esta tecnología no hace sino demostrarnos que el futuro de Internet y de lasaplicaciones informáticas en general que ya estamos viviendo van a estar muy ligadasa los móviles. Como siempre espero que este artículo os haya servido para introducirosdentro de la tecnología de voz y finalizo como siempre recordando que el trabajo durocomienza en el momento mismo en que acabáis de leer estas líneas con vuestrainvestigación y vuestro esfuerzo diario. Y nada más de momento, pronto volveremos alataque con otro interesante tema.Santiago Marquez Solis 18

×