Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

436
Vistas
Cómo averiguar si algo comenzó, en una línea de tiempo

Estoy moviendo un cabezal de reproducción que se muestra a continuación con color naranja . Hay varios clips de audio que se muestran en colores verde , azul claro, azul oscuro y gris .

cosas paralelas

Mientras muevo el cabezal de reproducción, cuando se encuentra un clip de audio, lo reproduzco.

Considere este pseudo-código:

 playhead.callbackForEveryFrame(doStuffOnEveryFrame) function doStuffOnEveryFrame(t) { // I intend to make sure all clips which should be playing, are actually play! if (clip_green.startTime < t) { clip_green.play() } if (clip_lightblue.startTime < t) { clip_lightblue.play() } if (clip_darkblue.startTime < t) { clip_darkblue.play() } if (clip_gray.startTime < t) { clip_gray.play() } }

El código anterior es ineficiente. Dado que está llamando a play continuamente, si t es más grande que startTime de un clip.

Pero se prefiere llamar a play solo una vez, exactamente cuando t cruza startTime .

Me cuesta encontrar el mejor enfoque para detectar cuándo t cruza el tiempo de startTime de cada clip de audio. ¿Alguien tiene alguna sugerencia?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puedes cambiar tu pseudocódigo a algo como esto:

 let events = [clip_green, clip_lightblue, clip_darkblue, clip_gray].flatMap(clip => [ { time: clip.start_time, do: () => clip.play() }, { time: clip.end_time, do: () => clip.stop() } ]).sort((a, b) => a.time - b.time) playhead.callbackForEveryFrame(doStuffOnEveryFrame) function doStuffOnEveryFrame(t) { while (events.length && events[0].time < t) events.shift().do() }

Para evitar que se llame a esta devolución de llamada incluso cuando todo esté listo, necesitaría una función para dejar de escuchar los cambios de marco. Algo como:

 function doStuffOnEveryFrame(t) { while (events.length && events[0].time < t) events.shift().do() if (!events.length) playhead.stopCallbackForEveryFrame(doStuffOnEveryFrame); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda