Entonces... estoy desarrollando una aplicación web... básicamente necesito pedirle a mi backend un mp3 a través de una solicitud de obtención (no se puede almacenar en caché ya que se actualiza con frecuencia, de hecho, este código es parte de un componente de carga para cambiar eso) y luego necesito repetirlo indefinidamente.
Si intenta hacer un bucle con el elemento de audio HTML, no se repite sin problemas... así que encontré un código que básicamente crea dos componentes de audio HTML y se encarga de reproducirlo sin problemas al reproducirlos simultáneamente y hacer malabarismos entre el volumen de los dos. ..
Funciona perfectamente, PERO, quiero optimizar esto... Actualmente le estoy pidiendo al backend el mismo archivo tres veces... una vez para un componente de audio de búfer (solo necesito la duración de esto, ya que no puede se guardará en el backend actualmente) y dos veces para cada HTMLAudio dentro del código SeamlessLoop que encontré.
Este problema incluso se ve acentuado por el hecho de que tengo 5 de esos bucles que necesito cargar cada vez.
//I removed part of the code to make it more digestable loadAudio() { for (let i = 1; i <= 5; i++) { let url = this.audio.tracks[i] let audio = new Audio() audio.src = url audio.load audio.addEventListener('loadedmetadata', () => { this.loops[`lvl${i}`] = new SeamlessLoop() //SeamlessLoop.addUri is basically how you inizialize this class //inside it creates two Audio elements and everything else it needs //addUri(src: string, duration: number, name: string) this.loops[`lvl${i}`].addUri(url, audio.duration*1000, 'loop') }) } }Ahora, ya tengo un montón de soluciones ...
Preferiría evitar ambas soluciones, ya que ambas requerirían una reestructuración del backend que podría no valer la pena...
Por lo tanto, aquí está mi pregunta:
¿Hay alguna manera de forzar que el navegador cargue una URL desde la memoria caché? Algo así como agregar un # después de una URL para forzarlo a descargarlo de nuevo en lugar de extraerlo de la memoria caché, pero al contrario... Si eso es una cosa, resolvería mi problema al instante.
Segunda pregunta, en caso de que la respuesta a la primera sea no:
¿Hay alguna forma de inicializar un nuevo Audio() usando como src otro Audio que ya haya descargado el archivo?
como lo sugiere @Terry,
No creo que haya una manera de hacer eso como sugerí.
Sin embargo, investigué la API de audio web y funcionó de maravilla (incluido un bucle continuo listo para usar)