Estoy tratando de crear una simple función de bucle utilizando HTML5 audio y tiene un muy primitivo de la solución como sigue:

$(audio).bind('timeupdate', function() {
  if (audio.currentTime >= 26){
    var blah = audio.currentTime; 
    audio.currentTime = 23;
    console.log(blah);
  }
})

Esto funciona bien, pero el único inconveniente aquí es que la timeupdate evento no desencadenar muy consistente. Por ejemplo, el de la consola.registro anterior devuelve:
26.14031982421875

26.229642868041992

26.13462257385254

26.21796226501465

…etc. (Usted consigue la idea..inconsistente veces)

Obviamente esto no va a funcionar para una aplicación donde el tiempo es importante (aplicaciones de música). Así que la solución obvia para mí sería el aumento de la granularidad con la que el timeupdate se desencadena el evento. No he sido capaz de encontrar cualquier API docs…pero quisiera saber si hay una manera de hacer esto.

InformationsquelleAutor udit | 2012-09-07

2 Comentarios

  1. 29

    Lo siento, pero esa es la forma en que funciona. Desde el especificaciones de html5:

    Cada 15 a 250 ms, o cuando el MediaController de los medios del controlador de posición de cambios, de lo que ocurra con menos frecuencia, el agente de usuario debe cola de una tarea de despedir a un simple evento denominado timeupdate en el MediaController.

    También,

    El caso de no ser despedido a más de 66Hz o más lento que 4Hz (suponiendo que los controladores de eventos no tardan más de 250 ms a ejecutar). Los agentes de usuario se anima a variar la frecuencia del evento en función de la carga del sistema y el costo promedio de procesamiento de los eventos de cada momento, de manera que la interfaz de usuario las actualizaciones no son más frecuentes que el agente de usuario puede manejar cómodamente, mientras que la decodificación del vídeo.

    Si usted lee a través de la especificación, se puede obtener la idea de que timeupdate evento es algo de «mejor esfuerzo» tipo de evento. Que se disparará cuando se puede y siempre el tiempo no afectar demasiado el rendimiento.

    Puede filtrar los eventos descartando algunos de vez en cuando para suavizar la llegada de los tiempos, pero me temo que no es posible hacer lo contrario.

    • En que se registra la hora actual y el intervalo es de más de 500 ms en algún momento. ES este intervalo más para los dispositivos con bajo rendimiento?
    • Muchos parecen preferir 250 ms por el motivo que sea
  2. 44

    Cabe señalar que puede leer el currentTime propiedad de un vídeo mucho más a menudo. Si el tiempo es realmente importante, y se puede vivir con un poco de incertidumbre, puedes probar este lugar.

    Es, sin embargo, mucho menos elegante que el uso de la etiqueta de la propia timeupdate evento.

    setInterval(function () {
        console.log(audio.currentTime); //will get you a lot more updates.
    }, 30);

    En este caso, usted tendrá que gestionar el intervalo de usted mismo, asegúrese de que usted claro que antes de nulling el elemento de audio. Pero es una posibilidad.

    Estoy usando este método en un elemento de vídeo, pero se debe aplicar aquí.

    • Me pregunto si esto va a afectar al rendimiento del mal.
    • utilizamos esta dentro de una cordova proyecto que reproduce/pausa un vídeo en tándem con un contenido de la capa, el usuario tiene control. En ese caso, no tenemos un problema de rendimiento con él. Pero es verdad, que ahora han uno de los más cosa a hacer cada pocos milisegundos. En lugar de setInterval, también se puede leer el .currentTime cuando otro se produce un evento (como la interacción con el usuario). O usted podría calcular un «margen de seguridad» si te preocupa la posición de video, pero sólo «alrededor de» la marca de 1 minuto – establecer un tiempo de espera de 59 segundos y empezar de una manera más rigurosa intervalo después de los 59 segundos.
    • Para más cortos, clips de audio, este método es casi invisible
    • Probablemente es mejor usar requestAnimationFrame en lugar de setInterval.
    • Sólo en el caso de la actualización de visual cosa. No hicimos esto por dos razones: no hemos mostrar el estado actual (ok, se nos hizo, también, pero para que la timeupdateevento fue bastante bueno) pero en comparación a una referencia interna. También, en ese momento, requestAnimationFrame no fue ampliamente apoyado.
    • FWIW requestAnimationFrame está garantizada «max 60 fps» que parece…así que si usted necesita para hacer cualquier cosa con más de granularidad, utilizar el Intervalo supongo…
    • Esto debe ser aceptado respuesta ya que da una solución real en lugar de simplemente decir que no se puede hacer.. felicitaciones para pensar fuera de la caja y proporcionar una solución!

Dejar respuesta

Please enter your comment!
Please enter your name here