Llevo horas buscando en todas partes alguna solución a esto, espero recibir alguna respuesta.
Estoy creando una especie de metrónomo. Hasta ahora es solo texto que se muestra en pantalla.
He encontrado una clase ([URL="http://www.libspark.org/wiki/BeatTimer/en"]BeatTimer.as[/URL]), que traspasé a Java para hacer funcionar esto.
Lo que hace es mediante un BPM dado, extraer el intervalo (en mili-segundos) de un golpe (o beat), luego mediante el método currentTimeMillis() de Java, hago un "nuevo temporizador" con la diferencia del currentTimeMillis() que se ejecutó cuando se inició la clase y del currentTimeMillis() que va actualizándose constantemente cuando se actualiza y finalmente aquel "nuevo temporizador" lo divido con el intervalo de un golpe.
El código en sí, es lo que quiero: entrega la cantidad de golpes que lleva mientras suena el audio, y va en sincronía con el...
Código:
El problema está cuando indico en el programa, que cuando se llegue a los 50 golpes o más, el bpm cambie a 94.50.(metodo start(); ) int startTime = (int) System.currentTimeMillis(); (metodo update(); ) int bpm = 128.00; int intervaloBeat = (60 * 1000) / bpm; int tiempoActual = (int) System.currentTimeMillis(); int tiempoDiferencia = (currentTime - (startTime)); beatPosition = tiempoDiferencia / intervaloBeat;
Código:
Al correr la aplicación, el contador se mantiene al ritmo de 128.000 BPM. Cuando llega a los 50, cambia su ritmo, pero la cantidad de golpes llegados cambia radicalmente, debido a la división que se produce en la variable beatPosition.if(beatTimer.beatPosition>=40) { beat.setBPM(94.5f); }
Lo que quiero es que al llegar a los 50 golpes, que la variable beatPosition (la que cuenta los golpes dados), solamente siga normalmente a los 51 golpes y así en adelante.
Mi pregunta es: ¿Existe alguna solución sin Timer, tal como sale en el 1º bloque de codigo?
Pues, ya probé con Timers, y funciona, pero muchas veces no va en sincronía con el audio por no tomar los decimales de la variable. Y claro, cumple la misma función, pero no es lo mismo, ya que el 1º bloque de codigo entrega los golpes con decimales incluidos, que tambien los necesito.
No sé si me expliqué bien, de hace tiempo que no hacía una consulta en un foro.