viernes, 26 de octubre de 2007

Prueba con otra PDA

Una de las dudas que quedaban con el avatar era si funcionaría "tal cual" en otro dispositivo, pensando en que la librería de Loquendo es propietaria y requiere de una licencia.

Hoy me han dejado una PDA (una Fujitsu-Siemens Loox 720) más moderna que la mía (una HP iPAQ 1940) para la otra línea de investigación con dispositivos móviles, y he copiado los ficheros binarios del programa y librerías necesarias, como la de OpenGL-ES y la de Loquendo.

La aplicación se ejecuta sin problemas, pero tal como se temía no funciona la librería de Loquendo, aparece un mensaje que indica que es necesario adquirir una licencia.

La parte gráfica sí que funciona, aunque curiosamente va algo más lenta, a pesar de que la PDA es más moderna y rápida que la que usaba yo. ¿Cómo es posible? Mirando las características de ambas resulta que la Fujitsu aunque es más rápida tiene una resolución VGA (640 x 480) mientras que la de la mía es la mitad (320 x 200). La CPU va aproximádamente al doble de megahercios (que tampoco significa mucho, los procesadores son diferentes), pero el número de píxeles es el cuadruple, así que es comprensible que le cueste más de hacer todos los cálculos, porque tampoco lleva aceleración gráfica por hardware. Lo que es de destacar es que la librería de OpenGL-ES (la Vincent Mobile 3D) haya detectado la resolución de la pantalla y haya adaptado a ella los gráficos de forma transparente, sin dar ningún problema ni ningún aviso.

Lo siguiente será probrarlo en un teléfono móvil (tipo Smartphone) que es para lo que se había pensado en un principio.

miércoles, 10 de octubre de 2007

Demo

Le he enseñado el avatar funcionando a la profesora que me lleva el trabajo de la línea de investigación. Hasta ahora solo había visto algún vídeo del avatar en corriendo en el emulador, pero no en una PDA real ni con la síntesis de voz.

Antes he mejorado un poco el aspecto y usabilidad del programa. He programado que para cada botón de la PDA diga una frase diferente, y he añadido un menú flotante con varias opciones, entre las que están habilitar o deshabilitar la iluminación del modelo, ídem con el renderizado de polígonos ocultos, o elegir entre varios juegos de frases de demostración.

La demo en sí creo que le ha gustado bastante. Después hemos estado hablando sobre mejoras que podrían hacérsele, aplicaciones (p.e. como interfaz de usuario para un sistema de control domótico mediante teléfono móvil), posibilidades de publicar algo en alguna revista o congreso, y completar el report que le entregué en julio con lo último que había hecho con el programa del avatar.

martes, 2 de octubre de 2007

Sincronización solucionada

Finalmente creo que he conseguido solucionar el tema de la sincronización. Para ello he utilizado la forma de reproducción tipo polling en el que se consulta en un bucle el estado de la reproducción del sonido, y se continúa con ella mediante la llamada a una función de lectura si no hubiera finalizado. Tras hacer varias ejecuciones de prueba se observa que en cada vuelta del bucle la función que hay que llamar para reproducir el siguiente sonido lee un fonema cada vez. Combinándolo con la función de callback antes mencionada que indicaba el código del fonema, se obtiene una forma precisa de controlar el momento en que se reproduce el sonido para poder intercalar la representación del gráfico del avatar correspondiente.

Al ejecutar el programa sobre el dispositivo real de pruebas la reproducción del sonido se oía entrecortada, debido con toda seguridad a que su CPU no tenía capacidad de proceso suficiente para renderizar el modelo en pantalla (recuérdese que no hay aceleración hardware) y generar la síntesis de voz con la velocidad suficiente como para que se oiga de forma fluida. La forma de solucionarlo fue simple: pintar el avatar en la pantalla una vez por cada N fonemas reproducidos. Si el valor de esta N es demasiado bajo la animación será más fluida pero el sonido se oirá entrecortado, y si es demasiado alto sucederá lo contrario, el sonido se oirá bien pero habrá menos frames por segundo para la animación y será menos fluida. Tras algunas pruebas en el dispositivo utilizado para el desarrollo este valor resultó ser de 3 o 4, es decir, de cada 3 o 4 fonemas generados se refresca la pantalla una vez, dando como resultado una animación que sin ser perfecta, es bastante decente.

Después de hacer estos ajustes en el programa y sus parámetros, el aspecto del log es como este (ver entrada anterior para saber qué es cada columna):



Como puede observarse, ahora las llamadas a la función pintarMalla están espaciadas más regularmente que antes y siempre después de que se han generado 3 o 4 fonemas indicados por sus códigos IPA.