Volver a proyectos
🟢 En desarrollo activo🚀 Rumbo a Play Store📱 Offline First
Zenith icon

Zenith Music

Reproductor de música local — Android

Reproductor de música 100% offline para Android. Sin streaming, sin suscripciones. Zenith trabaja con archivos de audio almacenados en tu dispositivo, dándote control total sobre tu biblioteca y tu experiencia visual.

Kotlin 2.3Jetpack ComposeMedia3 / ExoPlayerRoomDataStoreCoilGlanceMVVMGitHub

¿Qué significa offline-first?

Zenith no reproduce música de internet. No es Spotify ni YouTube Music. Es un reproductor para tu colección personal: archivos MP3, FLAC, WAV u otros formatos almacenados localmente en tu Android. Esto garantiza mayor privacidad, sin dependencia de servidores externos y funcionamiento sin conexión en todo momento.

Idiomas disponibles

🇪🇸Español🇺🇸English🇧🇷Português (Brasil)

En acción

Sobre el proyecto

Zenith nació de la frustración con los reproductores de música existentes: o son demasiado simples, o no permiten personalización real, o dependen de servicios en la nube. La idea fue construir algo diferente: un reproductor que trate tu música local como lo que es — tuya.

El proyecto demuestra que una app de categoría comercial puede construirse con arquitectura limpia, optimización seria y un foco real en experiencia de usuario, sin depender de backends externos ni servicios de pago.

Actualmente se encuentra en desarrollo activo, en fase de pulido final antes de su publicación en Google Play.

Diferencial clave

Personalización como filosofía

La mayoría de reproductores te dan control sobre la reproducción. Zenith te da control sobre todo: la apariencia de cada canción, los nombres que ves, la imagen de tu perfil, el fondo de la app y el tema visual. La interfaz no solo se adapta a tus colores — se adapta a tus preferencias.

  • Carátulas editables por canción, playlist o carpeta
  • Nombres y alias personalizados por canción
  • Imagen y nombre de perfil de usuario
  • Fondo personalizado en toda la aplicación
  • Temas: claro, oscuro y AMOLED puro
  • Color dinámico basado en la portada actual

Características

Lo que hace a Zenith diferente.

Personalización total

Cambia carátulas, nombres, alias, imagen de perfil y fondos. Tu app, tu identidad.

100% Offline

Sin streaming, sin suscripciones. Zenith trabaja exclusivamente con archivos locales en tu dispositivo.

Visualizadores en tiempo real

Visualizador lineal y aurora circular con BeatDetector propio, animados a 60fps.

Crossfade configurable

Transiciones suaves entre canciones con engine de polling adaptativo.

Ecualizador + perfiles

Ecualizador integrado con perfiles guardados por usuario.

Cola con drag & drop

Reordena tu cola de reproducción con gestos nativos, sin interrumpir la música.

Color dinámico

La interfaz adapta su paleta de color a la portada de la canción actual.

Analytics de escucha

Estadísticas de reproducción, artistas más escuchados y tiempo de escucha.

Multiidioma

Disponible en Español, Inglés y Portugués (Brasil) para una experiencia accesible a más usuarios.

Capturas de pantalla

Desliza para ver todas las pantallas. Clic para ampliar.

Haz clic en cualquier imagen para ampliarla

Stack técnico

Cada decisión tiene un por qué.

Kotlin 2.3 + Jetpack Compose + Material 3

UI 100% declarativa, sin XML. Gestión eficiente de recomposición mediante keys y remember estables.

Media3 / ExoPlayer + MediaLibraryService

Reproducción robusta con soporte para Android Auto. El servicio corre en foreground con notificación de control.

Room + KSP + Flow

Base de datos reactiva. Todos los queries exponen Flow<T>, que el ViewModel recolecta y transforma antes de emitir al UI.

DataStore + Coil + Glance

DataStore para preferencias sin bloqueos. Coil para caché de imágenes en memoria y disco. Glance para widgets nativos modernos.

Arquitectura MVVM

MusicViewModel como fuente central de estado. Repositorio único de datos. UI completamente reactiva al estado del ViewModel.

Reto principal

60fps bajo carga total

El mayor reto fue mantener una experiencia fluida a 60fps mientras múltiples sistemas pesados corren simultáneamente: visualizadores en tiempo real, UI animada en Compose, crossfade entre pistas y color dinámico que repinta la interfaz completa. Sin optimización, cualquiera de estos sistemas degrada el rendimiento. Con todos activos al mismo tiempo, el riesgo se multiplica.

Resultado: rendimiento estable bajo carga total, sin memory leaks conocidos, comparable a reproductores comerciales.

Optimizaciones clave

Problemas reales, soluciones reales.

Queries N+1

Query único con GROUP BY → transformado en Map dentro del ViewModel. Elimina roundtrips a la DB.

Visualizadores idle

Animaciones condicionales con Animatable. Si no hay audio activo, los visualizadores se pausan y liberan CPU.

Sincronización de frames

Reemplazado delay(16ms) fijo por withFrameMillis para sincronizar animaciones al refresh rate real del dispositivo.

Crossfade engine

Polling adaptativo: 2s → 500ms → 40ms conforme se acerca el final de la pista. Sin timers fijos.

Cola de reproducción

Eliminación de overdraw: reemplazado Surface container por Row optimizado. Reduce capas de composición.

NowPlaying UI

Refactor modular del componente en sub-componentes atómicos para reducir recomposición innecesaria en Compose.

Lo que demuestra este proyecto

  • Dominio de arquitectura moderna en Android
  • Optimización de rendimiento en tiempo real
  • Diseño de sistemas reactivos con Kotlin Flow
  • Desarrollo de interfaces complejas con Jetpack Compose
  • Capacidad de construir productos completos y pulidos

Roadmap / Próximamente

  • Baseline Profiles para mejorar cold start
  • Scrobbling: integración con Last.fm / ListenBrainz
  • Sleep timer configurable
  • Publicación en Google Play Store

Estado del proyecto

Zenith se encuentra en un estado sólido de producción local: arquitectura limpia, sin memory leaks conocidos, queries optimizadas y UI fluida bajo carga. Actualmente en fase de pulido final, con publicación en Google Play planificada en una versión futura.

✅ Arquitectura limpia✅ Sin memory leaks✅ UI fluida a 60fps🚀 Rumbo a Play Store