Files
pluriwave/docs/audio-switching-notes.md
T
FreeTLab 0e18c82292
Build & Deploy Pluriwave / Análisis de código (push) Successful in 12s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 1m52s
fix(player): recreate audio player on station switch
2026-05-21 20:52:28 +02:00

2.7 KiB

Notas de reproducción de radio con just_audio/audio_service

Referencia interna para futuras correcciones del reproductor de PluriWave. Este archivo está en docs/ y no se incluye en flutter.assets, por lo que no compila dentro de la app.

Hallazgos útiles

  • AudioPlayer.play() completa cuando la reproducción termina, se pausa o se detiene. En radio en vivo no representa simplemente “ya empezó a sonar”.
  • Las versiones antiguas de PluriWave que sí cambiaban de emisora usaban el flujo simple de audio_service + just_audio: stop() -> setUrl() -> play() dentro de playMediaItem.
  • La regresión apareció cuando mezclamos dos responsabilidades: usar handler.emisoraActual como estado técnico de audio y también como estado visual inmediato para mostrar el mini reproductor.
  • El logcat de 2026-05-21 mostró la media session de PluriWave atascada en CONNECTING sin PlayerException, con metadata de la emisora anterior (Track FM). Eso apunta a un player/ExoPlayer reutilizado que queda colgado entre stop/setUrl/play, no a un error HTTP visible.

Decisión aplicada en PluriWave

  • Mantener la selección visual inmediata en EstadoRadio mediante una emisora seleccionada propia, separada del emisoraActual interno del handler.
  • No usar setAudioSource(..., preload: false) como reemplazo de setUrl(...): en esta app rompió incluso la primera conexión.
  • No esperar play() como operación de finalización para radio en vivo.
  • Al cambiar emisora, recrear el AudioPlayer/ExoPlayer para matar completamente la reproducción anterior antes de setUrl(...).
  • Proteger EstadoRadio.reproducir con revisión para que una operación vieja no aplique presets/clicks encima de una nueva.

Intentos descartados

  • setAudioSource(..., preload: false): teóricamente razonable, pero en PluriWave rompió la primera conexión.
  • Hacer que el handler publique emisoraActual antes de que el flujo histórico de audio avance: arregla el mini reproductor, pero cambia la semántica que tenían las versiones viejas.
  • Reutilizar siempre el mismo AudioPlayer con stop(): logcat mostró estado CONNECTING persistente sin excepción al cambiar/reintentar.

Fuentes consultadas