Este blog llega a su fin, probablemente definitivo.
Empecé este trabajo en parte para obtener el D.E.A., y en parte para matar el gusanillo que tenía sobre programación en temas de imagen sintética y 3D. He cumplido ambos objetivos, y a partir de ahora dedicaré mis energías a la otra línea de investigación que inicié al mismo tiempo que esta.
Aquí queda el blog, que me ha resultado una buena herramienta como repositorio de mis experiencias, averigüaciones y diario de progresos y retrocesos. Espero que pueda resultarle útil a alguien algún día; y si no tampoco pasa nada, me ha gustado crearlo de la nada e irlo llenando poco a poco.
Nos vemos...
Óscar.
sábado, 15 de diciembre de 2007
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.
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.
Etiquetas:
Dispositivos móviles,
Gráficos,
Loquendo,
OpenGL-ES,
Vicent Mobile 3D Lib
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.
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.
Etiquetas:
Animación,
Avatares,
Curso,
Dispositivos móviles,
Gráficos,
Síntesis de voz
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.
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.
Etiquetas:
Animación,
Desarrollo,
Loquendo,
Síntesis de voz
jueves, 27 de septiembre de 2007
Probando otra forma de sincronización
Vuelvo a retomar el avatar donde me había quedado. Antes de probar nada con lo threads (que me dan algo de respeto por haber trabajado poco con ellos, y menos en un entorno tan limitado) voy a probar otra cosa que se me ha ocurrido.
En una entrada anterior comentaba que con la librería de Loquendo hay dos formas no bloqueantes de reproducción del sonido. Una es la que ya había probado (TTSNONBLOCKING). El otro que voy a probar ahora es el TTSSLICE y consiste en que la reproducción se hace en un bucle. Mediante una función se sabe si ha terminado o no, y en el primer caso se continúa con ella llamando a otra función.
En una entrada anterior comentaba que con la librería de Loquendo hay dos formas no bloqueantes de reproducción del sonido. Una es la que ya había probado (TTSNONBLOCKING). El otro que voy a probar ahora es el TTSSLICE y consiste en que la reproducción se hace en un bucle. Mediante una función se sabe si ha terminado o no, y en el primer caso se continúa con ella llamando a otra función.
miércoles, 19 de septiembre de 2007
Reunión con David
Hoy he estado hablando con David, que pertence al Grupo de Informática Gráfica Avanzada donde estoy haciendo el trabajo. Él está trabajando en algo parecido a lo mío, un avatar que habla y mueve la boca de forma sincronizada, aunque sobre plataforma PC y haciendo por detrás más cosas que el mio, que solo habla y nada más.
Él también estaba teniendo problemas con la sincronización y hemos estado hablando sobre ello. En principio lo que le pasa a él y a mi son cosas diferentes. Él parece que tiene problemas con el interface de SAPI con la librería, y que se le retarda el sonido respecto a la animación. Lo mío, no es nada de SAPI (por que no existe para el Windows Mobile que yo uso) y más que retrasarse o adelantarse el sonido lo que me pasa es que no se muestran los frames en el momento que deberían.
Me ha dado alguna idea de cosas que podría probar, como usar buffers y threads de forma explícita (actualmente no lo hago, "confío" de alguna forma en los que maneja por debajo OpenGL y Loquendo).
Lo probaré a ver si mejora el comportamiento... pero antes me voy a tomar unos días de descanso, que después de lo del D.E.A y los días previos me vendrá bien desconectar un poco.
Él también estaba teniendo problemas con la sincronización y hemos estado hablando sobre ello. En principio lo que le pasa a él y a mi son cosas diferentes. Él parece que tiene problemas con el interface de SAPI con la librería, y que se le retarda el sonido respecto a la animación. Lo mío, no es nada de SAPI (por que no existe para el Windows Mobile que yo uso) y más que retrasarse o adelantarse el sonido lo que me pasa es que no se muestran los frames en el momento que deberían.
Me ha dado alguna idea de cosas que podría probar, como usar buffers y threads de forma explícita (actualmente no lo hago, "confío" de alguna forma en los que maneja por debajo OpenGL y Loquendo).
Lo probaré a ver si mejora el comportamiento... pero antes me voy a tomar unos días de descanso, que después de lo del D.E.A y los días previos me vendrá bien desconectar un poco.
Etiquetas:
Animación,
Avatares,
Loquendo,
Síntesis de voz
martes, 18 de septiembre de 2007
Prueba del D.E.A
Hoy al mediodía he tenido la prueba del D.E.A., que dado que estábamos mucha gente se ha hecho en dos días (ayer y hoy).
La impresión que me ha quedado no ha sido muy buena, aunque tampoco mala del todo. He explicado lo que había hecho durante el curso, y por las preguntas que me ha hecho después el tribunal me he quedado con la impresión de que quizás me haya centrado en mi exposición demasiado en el proceso de desarrollo y demasiado poco en el de investigación. O lo he transmitido así porque no he sabido hacerlo de otra forma, o realmente quizás el trabajo haya sido más de desarrollo que de investigación.
Luego además al final no he hecho ningún artículo para publicar sobre los trabajos, ni he ido a ningún congreso, ni "otros méritos", así que aunque no me de puntos negativos me dejará de dar positivos.
Pero bueno, ya está hecho, y de la mejor forma que he sabido hacerlo, así que por ese lado estoy tranquilo y satisfecho, alea iacta est. No creo que me suspendan, porque algo he hecho, aunque tampoco voy a tener una nota precisamente brillante.
La impresión que me ha quedado no ha sido muy buena, aunque tampoco mala del todo. He explicado lo que había hecho durante el curso, y por las preguntas que me ha hecho después el tribunal me he quedado con la impresión de que quizás me haya centrado en mi exposición demasiado en el proceso de desarrollo y demasiado poco en el de investigación. O lo he transmitido así porque no he sabido hacerlo de otra forma, o realmente quizás el trabajo haya sido más de desarrollo que de investigación.
Luego además al final no he hecho ningún artículo para publicar sobre los trabajos, ni he ido a ningún congreso, ni "otros méritos", así que aunque no me de puntos negativos me dejará de dar positivos.
Pero bueno, ya está hecho, y de la mejor forma que he sabido hacerlo, así que por ese lado estoy tranquilo y satisfecho, alea iacta est. No creo que me suspendan, porque algo he hecho, aunque tampoco voy a tener una nota precisamente brillante.
