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.

No hay comentarios: