1
1
Publicado en el WMLClub en Octubre de 2000
INTRODUCCION A VOXML
Por 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:
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
2
Microsoft Speech Control Panel
Microsoft Command & Control Engine
Actualmente 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éis que 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 el SAPI de Microsoft solo se encuentra disponible en Ingles y por tanto las aplicaciones que hagamos en VoxML, de momento, deberán ser exclusivamente para este idioma. Este problema se reduce si las aplicaciones que desarrollemos son para grupos de personas cuyo idioma común es el ingles, como sucede en muchas empresas en las que es el lenguaje corporativo, no obstante es un inconveniente que va a limitar el número de usuarios que van hacer uso de
nuestros desarrollos. 3.1.- CONFIGURACION DE LOS AGENTES DE MICROSOFT USADOS EN EL MOTOROLA ADK Aunque ya lo referimos en el artículo sobre el ADK no está de más hacer un pequeño y breve repaso a la instalación de los agentes, si recordáis del artículo sobre el ADK la instalación del programa podía hacerse o bien desde un único fichero (fichero MobileADK.exe) o bien desde varios (MobileADK_Only y MobileADK_Agents.exe) independientemente del modo de instalación sucedía que durante dicho proceso si queríamos hacer uso posteriormente de las opciones para desarrollar aplicaciones que hagan uso de la tecnología VoxML hay que configurar correctamente las opciones de voz de nuestro micrófono en una secuencia de pantallas de configuración (ver las figuras siguientes) a las que se llega cuando realizamos la instalación de los 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).
3
Una vez que se ha indicado el tipo de micrófono del que disponemos, el sistema trata de evaluar la calidad del mismo mediante el dictado de una frase, para hacer este dictado se nos recomienda que el lugar donde nos encontremos se encuentre lo más silencioso posible para evitar que se produzcan interferencias que puedan mermar la calidad de la grabación de la frase (Figura 3 y 4)
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 voz que se emitan al usuario. Si nos posicionamos sobre True Voice se nos activaran los botones inferiores que nos permitirán lo siguiente:
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.
6
2.- Speech Input: Como su nombre indica se está refiriendo a la entrada de los elementos de voz que emita el usuario. Si nos posicionamos sobre True Voice se nos activaran 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.
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.
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 todos estos elementos quedan reflejados por la aparición de un curioso personaje llamado Merlin, que es la representación "física" de todo lo que estamos viendo y que será el encargado de hablar los contenidos de las aplicaciones que desarrollemos y de entender lo que digamos al sistema, en la figura vemos a este curioso elemento:
4.- EL LENGUAJE VoxML VoxML está basado en XML y se puede decir que es una variante del voiceXML (Voice eXtensible Markup Language) y sus especificaciones las dirige el VoiceXML Forum creado por AT&T, IBM, Motorola y Lucent Technologies.), y su objetivo es el de proporcionar a los desarrolladores de aplicaciones móviles una herramienta para crear aplicaciones cuya elemento fundamental de trabajo sea la voz, de modo que la navegació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 nuevo proyecto debemos de seguir una serie de pasos que nos permitan determinar de un modo u otro el esquema básico que nuestra aplicación tendrá, este aspecto es algo que todo programador sabe de su importancia ya que resulta fundamental para hacer un código estable y reutilizable en un futuro, es por tanto que el punto de partida de estudio de VoxML debe ser este mismo punto: la manera en la que las aplicaciones de voz deben de diseñarse para obtener el resultado esperado.
En este caso hay una serie de preguntas que debemos de hacernos y que posteriormente trataremos de identificar en un ejemplo que desarrollaremos poco a poco, 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 nos ayudara en la codificación es escribir el diagrama de estado de la aplicación, en el cual se determina las distintas situaciones por las cuales puede evolucionar nuestro programa de manera que indiquemos los estados, transiciones, validaciones de entrada en definitiva al hacer este diagrama obtendremos lo que se puede pasar a denominar Secuencia de Dialogo con el usuario:
9
4.1.- DIALOGS Y STEPS Los elementos fundamentales que componen una aplicación escrita en VoxML son solamente dos al igual que sucede en WML, si en éste los dos elementos básicos son
las barajas y las cartas, en VoxML son el DIALOG y el STEP, que proporcionan la estructura 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 de nuestro documento estará delimitado por los tags<DIALOG> y </DIALOG>. Por otra parte el elemento STEP nos va a definir un estado de nuestra aplicación de igual modo que el elemento CARD nos define una pantalla en WML. Este estado siempre representa un dialogo interactivo entre la aplicación y el usuario y siempre la navegación va a producirse entre diferentes STEP como resultado de las respuestas del usuario a las preguntas que plantee el programa. En el siguiente ejemplo tenéis el esqueleto 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 a la de WML, aunque cambia un poco la definición del tipo de documento XML siendo un poco más abreviada pero es una línea obligatoria que no podemos omitir. Por otra parte los comentarios en el código del programa siguen la sintaxis de siempre por lo que no tenemos que aprender en este apartado nada nuevo. Como sucede en otros lenguajes como HTML o WML los tags que tenemos pueden variar su comportamiento por la inclusión dentro de la etiqueta de modificadores (atributos) particulares para cada tipo de etiqueta, los cuales siempre presentan una sintaxis muy similar a la siguiente: <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 la ejecución por aquel STEP cuyo modificador NAME tiene el valor de "init" (en minúsculas siempre), este modificador NAME se utiliza para asignar un nombre lógico a los distintos STEP que forman parte de nuestro documento VoxML. Es importante señalar que no importa el lugar que ocupe el STEP init dentro del código, puede ser el primero que aparezca o el último pero siempre debe de aparecer. El tag DIALOG solo tiene un atributo que debemos conocer, es el BARGEIN el cual puede tomar dos valores "Y" o "N", y su finalidad es la de interrumpir la lectura de los elementos 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 muy interesante 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 el denominado PARENT y nos va a servir para indicar a que clase (CLASS) pertenece un STEP determinado. 4.2.- PROMPT, HELP E INPUT Otros elementos básicos que van a formar parte de las aplicaciones VoxML en un alto porcentaje, son los tags PROMPT, HELP e INPUT que vamos a ver a continuación y que ya nos permitirán elaborar un pequeño ejemplo ilustrativo de todo lo que hemos visto hasta 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>
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). No obstante la lectura que el Speech va a realizar puede modificarse por diferentes elementos del lenguaje VoxML que veremos un poco más adelante
como son los tags EMP, PROS, AUDIO etc.
· HELP: Es otro elemento que vamos a utilizar para definir el contenido de un STEP y que junto con PROMPT servirán de guía al usuario para el manejo de la aplicación. El tag HELP se ejecuta siempre que el usuario pide ayuda al sistema bien diciendo "Help" o en alguna frase que contenga dicha palabra como por ejemplo "I need Help" o frases similares. Si no definimos un HELP para un STEP determinado el sistema utiliza uno por defecto que consiste en parar la ejecución del PROMPT que se este leyendo en ese momento y a continuación emitir el mensaje: "No help is available" (No hay ayuda disponible), es por tanto aconsejable definir los distintos niveles de ayuda que cada 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 mensaje que debe de usarse en repetidas llamadas a HELP por parte del usuario, no hay límite en el número que puede indicarse a ORDINAL. Por otro lado tenemos a REPROMPT que puede tomar dos valores Y o N y que sirve para indicar que el mensaje de ayuda debe ser el contenido del PROMPT del STEP en 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 que sirve para definir las entradas que un usuario puede dar al sistema. Los elementos INPUT solo se pueden encontrar dentro de los tags STEP y nunca fuera de ellos. Hay diferentes tipos de tags INPUT que varían en función del tipo de entrada que se espere del usuario, es decir, no es lo mismo una entrada de una texto que de un valor numérico o de una fecha, en el cuadro tenéis todos los tipos de INPUT que pueden definirse en VoxML. Para indicar que una entrada es de un tipo o de otro tenemos el atributo TYPE en el que indicamos 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"
11
Dentro del tag INPUT existe un atributo muy importante que es el atributo NEXT que sirve para indicar el siguiente STEP a ejecutar cuando el usuario diga la opción correspondiente al INPUT.
4.3.- OTROS ELEMENTOS DEL LENGUAJE VOXML Aparte de los tags que veíamos en el punto anterior existen otros elementos que conviene 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
12
incluido en una tag PROMPT, obtengamos como salida el contenido de un fichero de voz (.wav o .voc). Es una posibilidad muy interesante ya que podemos tener fragmentos de noticias o cualquier otro tipo de información en un fichero de este tipo y podemos oírlo en su estado original sin necesidad de
tener que hacer nada más con él. Un ejemplo lo tenemos en el siguiente có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 del servidor. · GOODBYE: Este tag sirve para indicar que debe de suceder cuando el usuario dice "GoodBye" o "Bye" en el sistema. Generalmente cuando se dice esta palabra se fuerza a la finalización de la ejecución del DIALOG y de la sesión del usuario, sin embargo si hacemos el uso de este tag podemos modificar el comportamiento por defecto del sistema. El tag GOODBYE presenta dos atributos a saber: ORDINAL que indica la secuencia de acción a ejecutar por cada "Goodbye" que el usuario dice en el sistema y REPROMPT con el significado que ya hemos visto, es decir si vale 'Y' al el texto del tag GOODBYE se corresponderá con el del PROMPT del tag y si vale 'N' podemos añadir nosotros un texto adicional. En el siguiente ejemplo de GOODBYE se nos pide nuestro PIN, si decimos "Goodbye" la primera vez se nos muestra un mensaje en el que se nos avisa que si volvemos a decir adiós abandonaremos la aplicación, fijaros en el uso del atributo ORDINAL para marcar el orden en
el 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 una petición de cancelación sobre el STEP que actualmente se está procesando. Si no se define un CANCEL para un determinado STEP se utiliza uno por defecto que finaliza el PROMPT que actualmente se está leyendo y pasa a procesar los distintos INPUT que haya definidos para el STEP en cuestión. Para invocar a CANCEL el usuario solo debe de decir "Cancel" o "I would like cancel" o frases similares. CANCEL lleva asociado el atributo NEXT que indica el STEP que debe ejecutarse al producirse el CANCEL. · CASE y SWITCH: Estos dos tags se utilizan para controlar el flujo de la aplicación en función de las variables internas de VoxML. La sintaxis es muy similar que en otros lenguajes de programación y queda reflejada en el siguiente 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 caso de que la Marca="Daewoo".
· CLASS: Sirve para definir conjuntos de elementos que pueden ser reutilizados dentro del contexto de un mismo DIALOG. La ventaja de las clases estriba en que pueden ser heredadas por otros STEP y por otros CLASS que definamos posteriormente. Para poder heredar los CLASS que hayamos
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 clase padre para los dos STEP "Películas" y "Libros" ambos heredan el HELP de la clase simple y en caso de que pidamos ayuda obtendremos el mensaje de "Your choises are: ". 4.4.- UN EJEMPLO COMPLETO DE VOXML En este momento tenemos todos los elementos necesarios para elaborar una aplicación en VoxML completa, en este caso vamos a hacer una aplicación que nos va a servir para informarnos sobre los distintos modelos de coches de los que hay en un catalogo, para ello vamos a movernos por las distintas secciones que componen nuestro pequeño concesionario virtual y vamos a elegir aquel coche que nos interese para ver sus características básicas. Si recordáis decíamos antes que el primer paso para elaborar una aplicación de voz es determinar la secuencia de dialogo de la aplicación, en este caso podemos determinar que es la siguiente:
14
Por simplificar no hemos incluido más que tres marcas de coches y en cada marca solo dos modelos, si nos fijamos la secuencia de ordenes que el sistema debe de ir interpretando y devolviendo es muy sencilla: después del saludo inicial se nos pregunta por el tipo de marca que queremos consultar para una vez introducida nuestra selección volver a preguntar por el modelo de la marca en cuestión. Al elegirlo el sistema nos describirá las características de dicho modelo. En nuestro caso el siguiente paso será volver a la pantalla de saludo o bien abandonar la aplicación pero
el ejemplo es lo suficientemente abierto como para enlazarlo con otra tecnología (por ejemplo ASP) y permitir comunicación con base de datos y poder elaborar un sistema de compra de vehículos automatizado totalmente y a través del móvil (aunque seguro que a todos nos gustara primero ver el coche in situ). Siguiendo con el desarrollo de la aplicación vamos a explicar brevemente como deberíamos de preparar el ADK para iniciar una aplicación en VoxML. Cuando vimos el ADK en el artículo anterior comentamos que la estructura que debían de seguir nuestros trabajos en WML se basaban en el concepto de proyecto, esta política sigue siendo válida para VoxML, por lo que para hacer uso de este ejemplo lo primero que debemos de hacer es crear un nuevo proyecto, seleccionando su nombre y carpeta
15
donde se almacenará el código que elaboremos y seleccionar como tipo de proyecto VoxML (ver figura), de esta manera el propio ADK nos elaborará un esqueleto básico con el cual podemos comenzar (ver figura)
La versión 1.1 no nos muestra resaltado los distintos tags de los que consta VoxML (la versión 2.0 si lo hace) pero podemos chequear la sintaxis del programa si nos vamos a la opción de menú Tools/Check Sintax. Una vez que el programa este terminado y libre de errores no olvidéis poner el UIS en modo VoxML ya que si no, no podremos acceder a la aplicación, para hacer esto lo único que hay que hacer es seleccionar VoxML dentro 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 los elementos que describimos antes como están usados dentro del programa a fin de que todo 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>
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>
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 for
special 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 a
new 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 la bienvenida y nos indica que seleccionemos el tipo de modelo del que queremos obtener información. Si pedimos ayuda en cualquier momento se nos indicará en función del STEP en el que nos encontremos las opciones que tenemos disponibles. En el ADK tenéis en el UIS (User Interface Simulator) en la parte inferior la posibilidad de seleccionar las diferentes respuestas que podemos dar a Merlin si no queremos hacer uso del micrófono.
18
5.- CONCLUSIONES Poco a poco vamos analizando las tecnologías más vanguardistas que dentro del mundo WAP van apareciendo y a las que el desarrollador de aplicaciones móviles no puede dejar indiferente, si en el artículo sobre ASP indicábamos la importancia de las páginas interactivas y dinámicas como parte fundamental para un desarrollo de calidad en este artículo hemos demostrado que dicha afirmación es aun más cierta cuando nos ponemos a desarrollar para un "elemento" tan flexible como es la voz humana, el uso de esta tecnología no hace sino demostrarnos que el futuro de Internet y de las aplicaciones informáticas en general que ya estamos viviendo van a estar muy ligadas a los móviles. Como siempre espero que este artículo os haya servido para introduciros dentro de la tecnología de voz y finalizo como siempre recordando que el trabajo duro comienza en el momento mismo en que acabáis de leer estas líneas con vuestra investigación y vuestro esfuerzo diario. Y nada más de momento, pronto volveremos al ataque con otro interesante tema. Santiago Marquez Solis