SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
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:

     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
   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).




                                                                                               2
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)




                                                                         3
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:



                                                                                             4
   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
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.




                                                                                  6
   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
    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:




                                                                                       8
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>




                                                                                      9
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"




                                                                            10
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


                                                                                          11
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

                                                                            12
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:




                                                                                      13
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


                                                                                    14
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>

                                                                                        15
<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
<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.




                                                                                                 17
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




                                                                                   18

Más contenido relacionado

La actualidad más candente (13)

Museo virtual 0.70
Museo virtual 0.70Museo virtual 0.70
Museo virtual 0.70
 
3 p clei 4 inf-rmb
3 p clei 4 inf-rmb3 p clei 4 inf-rmb
3 p clei 4 inf-rmb
 
Fichas tecnicas
Fichas tecnicasFichas tecnicas
Fichas tecnicas
 
Historia de flash
Historia de flashHistoria de flash
Historia de flash
 
Historia
HistoriaHistoria
Historia
 
Presentación1
Presentación1Presentación1
Presentación1
 
Historia de flash
Historia de flashHistoria de flash
Historia de flash
 
Tipos de sstemas y aps
Tipos de sstemas y apsTipos de sstemas y aps
Tipos de sstemas y aps
 
windows 7 carlos briceño
windows 7 carlos briceñowindows 7 carlos briceño
windows 7 carlos briceño
 
Windows 7
Windows 7Windows 7
Windows 7
 
Conceptos pp
Conceptos ppConceptos pp
Conceptos pp
 
Windows 7
Windows 7Windows 7
Windows 7
 
Windows 7
Windows 7 Windows 7
Windows 7
 

Destacado (20)

Presentacion equipo alfa
Presentacion equipo alfaPresentacion equipo alfa
Presentacion equipo alfa
 
Barra Bonita por Fernanda Martinez
Barra Bonita por Fernanda Martinez Barra Bonita por Fernanda Martinez
Barra Bonita por Fernanda Martinez
 
Presentación a empresarios
Presentación a empresarios Presentación a empresarios
Presentación a empresarios
 
Antiguoregimen
AntiguoregimenAntiguoregimen
Antiguoregimen
 
Power 9
Power 9Power 9
Power 9
 
Folleto IBEROCIO 2011
Folleto IBEROCIO 2011Folleto IBEROCIO 2011
Folleto IBEROCIO 2011
 
Lengua tema 2 ismael
Lengua tema 2 ismaelLengua tema 2 ismael
Lengua tema 2 ismael
 
Julio jose
Julio joseJulio jose
Julio jose
 
Rendición de Cuentas Sapiencia 2014 #CuentasClaras
Rendición de Cuentas Sapiencia 2014 #CuentasClarasRendición de Cuentas Sapiencia 2014 #CuentasClaras
Rendición de Cuentas Sapiencia 2014 #CuentasClaras
 
Arestegui seminario sst-riesgospsicosociales-2012-04-24
Arestegui seminario sst-riesgospsicosociales-2012-04-24Arestegui seminario sst-riesgospsicosociales-2012-04-24
Arestegui seminario sst-riesgospsicosociales-2012-04-24
 
Trabajooctavo
TrabajooctavoTrabajooctavo
Trabajooctavo
 
Tema 1
Tema 1Tema 1
Tema 1
 
Lengua 3
Lengua 3Lengua 3
Lengua 3
 
18 obligatoria aa2
18 obligatoria aa218 obligatoria aa2
18 obligatoria aa2
 
a
aa
a
 
Tarea primer taller
Tarea primer tallerTarea primer taller
Tarea primer taller
 
felicitacion navideña
felicitacion navideña felicitacion navideña
felicitacion navideña
 
Tena 13. la vida a bordo
Tena 13. la vida a bordoTena 13. la vida a bordo
Tena 13. la vida a bordo
 
Oficialismo femenino
Oficialismo femeninoOficialismo femenino
Oficialismo femenino
 
Informació pràctica per a la creació d'empreses
Informació pràctica per a la creació d'empresesInformació pràctica per a la creació d'empreses
Informació pràctica per a la creació d'empreses
 

Similar a 20001121 Introducción a VoxML

Similar a 20001121 Introducción a VoxML (20)

20000828 Motorola Mobile ADK
20000828   Motorola Mobile ADK20000828   Motorola Mobile ADK
20000828 Motorola Mobile ADK
 
Sandra 1101
Sandra  1101Sandra  1101
Sandra 1101
 
20001231 Ericsson Gateway
20001231   Ericsson Gateway20001231   Ericsson Gateway
20001231 Ericsson Gateway
 
Animacion 2 d
Animacion 2 dAnimacion 2 d
Animacion 2 d
 
Flash educacion
Flash educacionFlash educacion
Flash educacion
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
RIATec Windows Phone 8 Voice APIs
RIATec Windows Phone 8 Voice APIsRIATec Windows Phone 8 Voice APIs
RIATec Windows Phone 8 Voice APIs
 
David reyes
David reyesDavid reyes
David reyes
 
Action script
Action scriptAction script
Action script
 
Trabajo power point
Trabajo power pointTrabajo power point
Trabajo power point
 
Introducción a action script 3
Introducción a action script 3Introducción a action script 3
Introducción a action script 3
 
Software
SoftwareSoftware
Software
 
Software
SoftwareSoftware
Software
 
Software
SoftwareSoftware
Software
 
Edgar campo action scrip
Edgar campo action scripEdgar campo action scrip
Edgar campo action scrip
 
Colegio Venecia Trabajo #2 Gina Franco
Colegio Venecia Trabajo #2 Gina FrancoColegio Venecia Trabajo #2 Gina Franco
Colegio Venecia Trabajo #2 Gina Franco
 
Introducción a action script 3
Introducción a action script 3Introducción a action script 3
Introducción a action script 3
 
Natalia camargo sanchez 1102 j.t
Natalia camargo sanchez 1102 j.tNatalia camargo sanchez 1102 j.t
Natalia camargo sanchez 1102 j.t
 
Trabajo slideshare
Trabajo slideshareTrabajo slideshare
Trabajo slideshare
 
Lenguaje de programacion de visual basic
Lenguaje de programacion de visual basicLenguaje de programacion de visual basic
Lenguaje de programacion de visual basic
 

Más de Santiago Márquez Solís (13)

Bitcoin. In Crypto we Trust
Bitcoin. In Crypto we TrustBitcoin. In Crypto we Trust
Bitcoin. In Crypto we Trust
 
Administración básica de ubuntu server parte 1
Administración básica de ubuntu server   parte 1Administración básica de ubuntu server   parte 1
Administración básica de ubuntu server parte 1
 
Administración básica de ubuntu server parte 3
Administración básica de ubuntu server   parte 3Administración básica de ubuntu server   parte 3
Administración básica de ubuntu server parte 3
 
Administración básica de ubuntu server parte 2
Administración básica de ubuntu server   parte 2Administración básica de ubuntu server   parte 2
Administración básica de ubuntu server parte 2
 
Tecnologia Moviles para Pymes
Tecnologia Moviles para PymesTecnologia Moviles para Pymes
Tecnologia Moviles para Pymes
 
Fundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidFundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para Android
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
20000801 Ericsson WAPIde
20000801   Ericsson WAPIde20000801   Ericsson WAPIde
20000801 Ericsson WAPIde
 
20010315 WAP Lite Gateway
20010315   WAP Lite Gateway20010315   WAP Lite Gateway
20010315 WAP Lite Gateway
 
20000725 UMTS y GPRS
20000725   UMTS y GPRS20000725   UMTS y GPRS
20000725 UMTS y GPRS
 
20001130 Fundamentos de las Redes GSM
20001130 Fundamentos de las Redes GSM20001130 Fundamentos de las Redes GSM
20001130 Fundamentos de las Redes GSM
 
20001020 Programación ASP y WML
20001020 Programación ASP y WML20001020 Programación ASP y WML
20001020 Programación ASP y WML
 
20001215 Programación de Servlets y WML
20001215   Programación de Servlets y WML20001215   Programación de Servlets y WML
20001215 Programación de Servlets y WML
 

Último

Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 

Último (20)

Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 

20001121 Introducción a VoxML

  • 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: 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 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). 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) 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 voz que se emitan al usuario. Si nos posicionamos sobre True Voice se nos activaran los botones inferiores 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 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. 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 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: 8
  • 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> 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). 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" 10
  • 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 11
  • 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 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 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: 13
  • 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 14
  • 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> 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 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. 17
  • 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 18