Как навести порядок в аудиотеке на Android с помощью Lyrico
Если вы до сих пор храните музыку локально на телефоне в виде файлов FLAC или MP3, то наверняка сталкивались с вечным хаосом в тегах. Скачанный альбом внезапно разбивается на пять разных исполнителей в плеере, обложки нет, а вместо текста песни отображаются иероглифы или пустота.
Десктопные утилиты вроде MusicBrainz Picard или Mp3tag решают эту проблему отлично. Но подключать телефон кабелем к компьютеру каждый раз, когда закинул пару новых треков, откровенно лень. На самом Android нормальных редакторов тегов почти не осталось: старые приложения заброшены, а новые либо напичканы рекламой, либо не умеют ничего сложнее базовой правки названия трека.
Недавно наткнулся на проект Lyrico от разработчика Replica0110. Это свежее приложение с открытым исходным кодом на Kotlin, которое берет на себя рутину по редактированию метаданных и подтягиванию текстов песен прямо на смартфоне.
Что внутри и чем проект интересен
С виду Lyrico выглядит как аккуратный редактор с интерфейсом в стиле HyperOS (здесь используется библиотека компонентов Miuix для Jetpack Compose). Но под капотом спрятана серьезная связка из нативных библиотек и встраиваемого движка.
Приложение умеет:
- Сканировать память устройства и группировать треки по папкам, альбомам или артистам
- Читать и перезаписывать любые теги в форматах MP3, FLAC, OGG/Opus, M4A/AAC и WAV через проверенную временем библиотеку TagLib
- Анализировать громкость треков по стандарту EBU R128 через библиотеку libebur128
- Пакетно переименовывать файлы, массово редактировать поля тегов и удалять мусор
- Работать с синхронизированными текстами песен в форматах обычного LRC, построчного и даже сложного TTML с караоке-таймингами
Особенно подкупает то, как автор подошел к поиску информации в сети.
Плагины на JavaScript внутри QuickJS
Вместо того чтобы намертво зашивать в код API конкретных китайских или западных музыкальных сервисов (которые регулярно меняют эндпоинты и ломают парсинг), создатель Lyrico вынес всю сетевую логику в плагины.
Каждый плагин представляет собой небольшой скрипт на JavaScript. Внутрь Android-приложения автор встроил легковесный движок quickjs-ng (форк QuickJS Фабриса Беллара с поддержкой современных стандартов JS).
Как устроен процесс:
- Вы устанавливаете плагин нужного источника данных через манифест.
- Приложение передает поисковый запрос в изолированную среду QuickJS.
- Скрипт идет в сеть, парсит метаданные, обложки или тексты, а затем возвращает стандартизированный JSON.
- Нативный слой Kotlin принимает результат и записывает его в аудиофайл.
Такой подход дает два плюса. Во-первых, если источник меняет API, достаточно обновить небольшой JS-файл без пересборки всего APK. Во-вторых, любой разработчик может за вечер набросать парсер для своего любимого сайта или локального сервера Navidrome/Subsonic. В репозитории уже есть подробная документация по host API и структуре манифестов.
Интеграция с локальными плеерами
Еще одна деталь, которая выделяет проект среди аналогов: Lyrico умеет работать как внешний редактор метаданных для сторонних плееров.
Вместо того чтобы изобретать собственный встроенный аудиоплеер, разработчик сосредоточился именно на утилитарной части и добавил точки интеграции через Android Intent. Несколько независимых открытых плееров (например, Halcyon, Mica Music, Raws-Music и Prism Music) уже умеют открывать текущий трек напрямую в редакторе Lyrico для быстрой правки.
Как собрать проект локально
Сборка приложения стандартная для Android-проектов со сложным NDK-стеком. Вам понадобятся:
- JDK 21
- Android SDK и Android NDK 29
- CMake 4.1.2
Структура модулей предельно простая:
lyrico-app— UI на Jetpack Compose, управление музыкальной библиотекой, плагинный рантаймlyrico-audiotag— обертка над C++ библиотеками для чтения и записи теговdocs— документация к API плагинов на базе VitePress
Собрать отладочный APK можно командой в терминале:
./gradlew :lyrico-app:assembleDebug
Если хотите просто проверить компиляцию Kotlin-кода без полной линковки нативных библиотек:
./gradlew :lyrico-app:compileDebugKotlin
Код распространяется под лицензией Apache License 2.0.
Стоит ли пробовать
Lyrico пригодится в двух случаях. Если вы слушаете музыку оффлайн и устали от кривых тегов, это одно из самых удобных решений под Android на текущий момент. Вторая причина взглянуть на проект — инженерная: здесь можно подсмотреть отличный пример встраивания QuickJS в современное Compose-приложение и аккуратную организацию работы с нативными C++ библиотеками через JNI.
Проект еще свежий, часть документации переводится с китайского, но архитектурная задумка выглядит очень практично. Поставить APK можно прямо со страницы релизов на GitHub.
