Sincronización de listas y tiempos de crossfade en Metrolist
Problema
El tiempo del crossfade podía desviarse al cambiar la velocidad de reproducción y hacer que la pista siguiente comenzara antes de tiempo. Por otro lado, la sincronización podía duplicar listas y consumir demasiada memoria porque la limpieza se ejecutaba después de iniciar el ciclo de sincronización.
Cambios
Ajusté el cálculo del retraso del crossfade según la velocidad de reproducción, pasé esa velocidad al reproductor secundario y utilicé un PlayerMessage de ExoPlayer para sincronizar el momento con precisión en el hilo principal. Para la sincronización de listas, moví la limpieza antes del ciclo para eliminar entradas obsoletas antes de aplicar datos nuevos.
Resultado
Las transiciones de crossfade tienen en cuenta la velocidad de reproducción y la sincronización evita los problemas de duplicación y memoria corregidos por el cambio.