Foros del Web » Programación para mayores de 30 ;) » Java »

Problema/Duda con formula que actua como Timer...

Estas en el tema de Problema/Duda con formula que actua como Timer... en el foro de Java en Foros del Web. Hola!. Soy nuevo en Foros del Web. Llevo horas buscando en todas partes alguna solución a esto, espero recibir alguna respuesta. Estoy creando una especie ...
  #1 (permalink)  
Antiguo 21/07/2013, 23:08
 
Fecha de Ingreso: julio-2013
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Problema/Duda con formula que actua como Timer...

Hola!. Soy nuevo en Foros del Web.

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:
(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;
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.

Código:
if(beatTimer.beatPosition>=40) {
	beat.setBPM(94.5f);
}
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.

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.

Etiquetas: bpm
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:41.