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.

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.

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.

lunes, 10 de septiembre de 2007

A preparar el D.E.A

El problema de la sincronización sigue ahí, he hecho alguna prueba para intentar resolverlo pero no lo he conseguido (estas pruebas no tenían nada que ver con lo de los threads que comentaba el otro día).

Ahora dejaré el tema aparcado por un tiempo. El próximo lunes 17 es la prueba para el D.E.A. (Diploma de Estudios Avanzados). Hay que hacer una exposición oral de unos 10 a 15 minutos sobre los trabajos de investigación realizados en el curso. Toca preparar la presentación con el PowerPoint (o en mi caso con el OpenOffice Impress) y ensayarla de viva voz unas cuantas veces para asegurarse de que no queda muy corta ni muy larga, y de que se dice todo lo que se quiere decir sin hacer pausas ni que se trabe la lengua.

martes, 4 de septiembre de 2007

Problema de sincronización

He estado investigando el problema que tengo con la sincronización de la voz y la animación. Para comprenderlo mejor estoy guardando en el fichero de log de la aplicación la mayor cantidad de información posible, y para este caso concreto he añadido los milisegundos que lleva en ejecución el programa para ver los tiempos en los que se reproduce el sonido y se pinta la imagen.

Después de algunas pruebas he averiguado que es lo que pasa, pero todavía no se la razón. No es que la voz y la imagen estén desincronizadas, pasan dos cosas:
  • Se generan más fonemas de los que se representan. Esto no es problemático, ya comentaba en una entrada anterior que solo se representaban seis visemas (las vocales y la eme).
  • Por lo anterior, solo uno de cada dos o tres (pongamos tres) fonemas se pintan en pantalla.
  • Observando el log y lo que se ve en la pantalla, parece que se reparte mal el tiempo dedicado a cada una de las dos cosas, y así, a veces se pinta cuatro veces seguidas un mismo visema y no se pronuncia niguno nuevo (dando lugar a un chasquido o microcorte en la reproducción del sonido), y otras veces pasa justo lo contrario, el sonido se oye con fluidez pero la animación queda paralizada.
Como ejemplo, pego aquí una imagen del log generado (clic para agrandar):


La relación entre el número de fonemas y las veces que se pinta la malla no es equitativa ni constante, y es por eso que la animación no va fluida ni sincronizada. Por ejemplo, entre el ms. 6184 y el 6640 se generan 15 fonemas, y el último de ellos (correspondiente a la malla 6) se representa en pantalla 3 veces seguidas. Lo contrario ocurre en entre el ms. 6472 y el 7577. En este caso se pronuncian solo tres fonemas, pero solo se pinta el último de ellos 4 veces. Lo ideal sería que los refrescos de pantalla sucediesen aproximadamente a intervalos regulares con respecto a los fonemas generados.

La solución que se me ocurre puede ser bastante complicada y no es seguro que funcione, pasaría por ajustar de alguna forma la prioridad de ejecución de los threads que se encargan del OpenGL-ES y de la librería de Loquendo. Cosa complicada a priori por dos razones: Desconozco cómo está ese tema en Windows CE y en eVC, y también desconozco si ambas librerías los utilizan y si es posible acceder a ellos.