Cómo organizar tu biblioteca de audio en Android con Lyrico
Si todavía almacenas música localmente en tu teléfono como archivos FLAC o MP3, probablemente has lidiado con el caos eterno de las etiquetas. Un álbum descargado de repente se divide en cinco artistas diferentes en tu reproductor, no hay portada, y en lugar de letras ves galimatías o nada en absoluto.
Las herramientas de escritorio como MusicBrainz Picard o Mp3tag manejan bien este problema. Pero conectar tu teléfono a tu computadora cada vez que agregas algunas canciones nuevas es francamente tedioso. En Android en sí, los editores de etiquetas decentes casi han desaparecido: las aplicaciones antiguas están abandonadas, y las nuevas están llenas de anuncios o solo pueden hacer ediciones básicas del título de la pista.
Recientemente descubrí el proyecto Lyrico del desarrollador Replica0110. Es una nueva aplicación de código abierto construida con Kotlin que maneja el trabajo tedioso de editar metadatos y buscar letras directamente en tu teléfono inteligente.
Qué hay dentro y por qué el proyecto es interesante
A primera vista, Lyrico parece un editor elegante con una interfaz estilo HyperOS (usando la biblioteca de componentes Miuix para Jetpack Compose). Pero bajo el capó, hay una combinación seria de bibliotecas nativas y un motor integrado.
La aplicación puede:
- Escanear la memoria del dispositivo y agrupar pistas por carpetas, álbumes o artistas
- Leer y reescribir cualquier etiqueta en formatos MP3, FLAC, OGG/Opus, M4A/AAC y WAV a través de la biblioteca TagLib probada en batalla
- Analizar la intensidad del sonido de las pistas usando el estándar EBU R128 a través de la biblioteca libebur128
- Renombrar archivos por lotes, editar campos de etiquetas en masa y eliminar basura
- Trabajar con letras sincronizadas en LRC estándar, línea por línea, e incluso formatos TTML complejos con tiempos de karaoke
Lo que destaca especialmente es cómo el autor abordó la recuperación de información en línea.
Plugins de JavaScript dentro de QuickJS
En lugar de codificar APIs para servicios musicales chinos o occidentales específicos (que cambian regularmente los endpoints y rompen el análisis), el creador de Lyrico movió toda la lógica de red a plugins.
Cada plugin es un pequeño script de JavaScript. El autor integró el motor ligero quickjs-ng (un fork de QuickJS por Fabrice Bellard con soporte para estándares JS modernos) dentro de la aplicación Android.
Cómo funciona el proceso:
- Instalas un plugin de fuente de datos a través del manifiesto.
- La aplicación pasa una consulta de búsqueda al entorno aislado de QuickJS.
- El script se conecta en línea, analiza metadatos, portadas o letras, y devuelve JSON estandarizado.
- La capa nativa de Kotlin recibe el resultado y lo escribe en el archivo de audio.
Este enfoque proporciona dos beneficios. Primero, si una fuente cambia su API, solo actualizas un pequeño archivo JS sin reconstruir todo el APK. Segundo, cualquier desarrollador puede crear un analizador para su sitio favorito o servidor Navidrome/Subsonic local en una noche. El repositorio ya tiene documentación detallada sobre la API del host y la estructura del manifiesto.
Integración con reproductores locales
Otro detalle que distingue a este proyecto: Lyrico puede funcionar como un editor de metadatos externo para reproductores de terceros.
En lugar de inventar su propio reproductor de audio integrado, el desarrollador se centró en el lado utilitario y agregó puntos de integración a través de Android Intent. Varios reproductores independientes de código abierto (por ejemplo, Halcyon, Mica Music, Raws-Music y Prism Music) ya saben cómo abrir la pista actual directamente en el editor de Lyrico para correcciones rápidas.
Cómo construir el proyecto localmente
Construir la aplicación es estándar para proyectos Android con una pila NDK compleja. Necesitarás:
- JDK 21
- Android SDK y Android NDK 29
- CMake 4.1.2
La estructura del módulo es sencilla:
lyrico-app— UI en Jetpack Compose, gestión de biblioteca de música, tiempo de ejecución de pluginslyrico-audiotag— envoltorio sobre bibliotecas C++ para leer y escribir etiquetasdocs— documentación de la API de plugins basada en VitePress
Puedes construir un APK de depuración con este comando de terminal:
./gradlew :lyrico-app:assembleDebug
Si solo quieres probar la compilación del código Kotlin sin vincular bibliotecas nativas completas:
./gradlew :lyrico-app:compileDebugKotlin
El código se distribuye bajo la Licencia Apache 2.0.
¿Vale la pena probarlo?
Lyrico es útil en dos casos. Si escuchas música sin conexión y estás cansado de las etiquetas desordenadas, es una de las soluciones más convenientes en Android en este momento. La segunda razón para ver el proyecto es la ingeniería: puedes ver un gran ejemplo de incrustar QuickJS en una aplicación Compose moderna y una organización limpia del trabajo con bibliotecas C++ nativas a través de JNI.
El proyecto todavía está fresco, parte de la documentación se está traduciendo del chino, pero la idea arquitectónica se ve muy práctica. Puedes instalar el APK directamente desde la página de lanzamientos en GitHub.
Proyectos relacionados