Плеер для музыки, которая лежит у вас файлами. Работает на Linux, Windows и Android.
Версия 0.1.3, pre-alpha. Сборки для Linux, Windows и Android лежат в релизах, собрать самому тоже можно, инструкция ниже. Пишу в основном под Linux. Windows и Android собираются из того же кода, но проверяю я их реже.
Хотелось плеер, который быстро открывает большую папку с музыкой, играет почти любой формат и не съедает память. Сейчас в простое он занимает около 55 МБ и почти не трогает процессор, при воспроизведении нагрузка около 1 %.
Всё, что плеер знает о музыке, хранится в одной базе SQLite у вас на диске. Сами файлы он только читает и ничего в них не пишет. Дополнительные функции сделаны модулями и выключены, пока вы их не включите в настройках.
| Альбом | Исполнители |
|---|---|
![]() |
![]() |
| Полный плеер на телефоне | Библиотека | Настройки |
|---|---|---|
![]() |
![]() |
![]() |
Библиотека собирается из папок: с диска, с флешки, из сети. Для каждой папки можно выбрать, как её
разбирать: по папкам вида «Исполнитель / Альбом», по тегам или по композиторам, если там классика.
Если отключить диск, лайки и история никуда не денутся. Обложки плеер берёт из папки альбома или из
тегов, исполнителю можно поставить своё фото. Поиск прощает опечатки и не ту раскладку: ghbdtn
найдёт «привет». Сканирование идёт в фоне, окно при этом не подвисает (проверял на 100 000 файлов).
Треки идут друг за другом без пауз. Скорость меняется от 0,25× до 3× без сдвига высоты звука. Ещё есть кроссфейд между альбомами, таймер сна, повтор отрезка A–B и перемешивание треков или целых альбомов. Когда альбом заканчивается, плеер может продолжить другим альбомом того же исполнителя. Если выдернуть наушники, музыка встанет на паузу.
Тексты песен берутся из файла .lrc рядом с треком или из тегов. Показывать их можно обычными
строками или сценами, это анимированный текст в духе колонки Cotodama. Стиль сцены зависит от
настроения трека, а настроение плеер определяет по самому звуку. На компьютере есть редактор .lrc:
метки ставятся на слух прямо по волне трека.
Плеер ведёт статистику прослушиваний и рисует по ней карту: чем дольше вы слушали исполнителя, тем крупнее его круг. По той же статистике каждый день собирается плейлист дня из вашей же библиотеки, в основном знакомое и немного нового, выстроенное волной по темпу.
Для любителей покопаться в файлах есть проверка подлинности (пока бета). Она ищет «lossless», пережатый из MP3, и растянутый Hi-Res. Это оценка по спектру, а не приговор. Раздел «Здоровье» показывает битые файлы, дубликаты и пропуски в альбомах.
Тем семь: светлая, тёмная, чёрная для OLED, Винил, Синтвейв, Терминал и Обложка, которая берёт цвета с обложки играющего трека. Интерфейс на русском или английском, масштаб от 80 до 150 %.
С системой плеер дружит обычным способом. В Linux это MPRIS: медиаклавиши, виджет в GNOME и KDE,
playerctl. В Windows медиаклавиши и панель громкости через SMTC, на Android уведомление с кнопками
и экран блокировки. На ноутбуке работают жесты тачпада: свайп вбок листает назад и вперёд, вниз
сворачивает полный плеер.
На телефоне свой интерфейс, рассчитанный на палец: вкладки снизу, над ними мини-плеер, по тапу открывается полный плеер, свайпом вниз он сворачивается. Музыка играет в фоне. Жест «Назад» на главном экране уводит плеер в фон, а не закрывает его.
| Без потерь | С потерями | Редкое |
|---|---|---|
| FLAC, ALAC, WAV, AIFF, WavPack, Monkey's Audio (APE), TTA, DSD (DSF, DFF), TAK¹, WMA Lossless¹, TrueHD¹ | MP3, AAC, Opus, Vorbis, Musepack, WMA¹, AC3¹, DTS¹ | ATRAC¹, RealAudio¹, речевые кодеки¹ |
¹ Через FFmpeg, если он установлен (об этом ниже).
FLAC, WavPack, APE и TTA я сверял бит в бит с эталонными декодерами, у Opus длина совпадает до отсчёта. DSD плеер переводит в PCM 88,2 или 176,4 кГц своим фильтром. Подробная таблица, кто чем декодируется и насколько проверен, лежит в docs/FORMATS.md.
- Скачайте сборку из релизов или соберите сами (см. ниже) и запустите
nyanoto. - Нажмите «Выбрать папку с музыкой».
- Плеер спросит, как её разбирать. Если музыка разложена по папкам исполнителей и альбомов, выбирайте «По папкам». Если всё свалено в одну кучу, то «По тегам».
- Подождите, пока пройдёт сканирование, его видно по тонкой полоске под заголовком.
Папку можно добавить и при запуске: nyanoto ~/Music.
На Android при первом запуске плеер попросит доступ ко всем файлам. Без него он не увидит обложки
cover.jpg и тексты .lrc, которые лежат рядом с музыкой. После этого он сам предложит добавить папку
Music.
База, настройки и кэш обложек лежат в ~/.local/share/nyanoto на Linux, в %APPDATA%\nyanoto на Windows
и во внутренней папке приложения на Android.
| Клавиша | Что делает |
|---|---|
| Пробел | пауза и воспроизведение |
| ← / → | перемотка на 5 секунд, с Shift на 30 |
| Ctrl+← / Ctrl+→ | предыдущий и следующий трек |
| ↑ / ↓ | громче и тише |
| M | выключить и вернуть звук |
| L | добавить в «Любимые» или убрать |
| Q | очередь |
| Ctrl+F или / | поиск |
| Esc | назад, закрыть окно, выйти из поля ввода |
Медиаклавиши тоже работают. Буквы срабатывают и в русской раскладке.
Нужен Rust 1.88 или новее, для Android 1.92. Звуковые библиотеки (libopus, libwavpack, Monkey's Audio
SDK, libmpcdec, Signalsmith Stretch) лежат в crates/nyanoto-core/vendor и собираются вместе с
плеером, ставить их отдельно не нужно.
# Fedora
sudo dnf install gcc-c++ alsa-lib-devel fontconfig-devel
# Debian, Ubuntu
sudo apt install g++ pkg-config libasound2-dev libfontconfig1-dev
cargo build --release -p nyanoto-app
./target/release/nyanotoЯрлык и значки для меню лежат в packaging/linux и packaging/icons.
cargo build --release -p nyanoto-appСобирается через MSVC. Из Linux можно собрать кросс-компилятором llvm-mingw под цель
x86_64-pc-windows-gnullvm. Значок программы: packaging/windows/nyanoto.ico.
Понадобятся JDK 17, Android SDK с платформой 35 и build-tools 35, NDK r28c и цели Rust:
rustup target add aarch64-linux-android x86_64-linux-android
export ANDROID_HOME=~/Android/Sdk
export ANDROID_NDK=$ANDROID_HOME/ndk/28.2.13676358
packaging/android/build.sh # release под arm64 и x86_64
PROFILE=dev ABIS=x86_64 packaging/android/build.sh # быстрая сборка для эмулятораAPK появится в target/android/nyanoto.apk. Скрипт подписывает его ключом
~/.android/nyanoto-release.jks, а пароль читает из файла nyanoto-release.jks.pass рядом. Ключ
создаётся один раз:
printf '%s' 'придумайте-пароль' > ~/.android/nyanoto-release.jks.pass
keytool -genkeypair -keystore ~/.android/nyanoto-release.jks -alias nyanoto \
-keyalg RSA -keysize 4096 -validity 10000 -dname "CN=Nyanoto" \
-storepass:file ~/.android/nyanoto-release.jks.passНе теряйте его: версию, подписанную другим ключом, Android поверх старой не поставит.
FFmpeg нужен только для редких форматов вроде WMA, AC3, DTS и TAK. В плеер он не вшит: библиотеки
загружаются, когда попадается такой файл. Плеер ищет их в папке ffmpeg рядом с программой, потом в
системе, нужна версия 7. Собрать свою сборку FFmpeg 7.1 только для звука можно скриптом
crates/nyanoto-core/ffmpeg/build.sh. Без FFmpeg плеер работает как обычно, просто такие файлы не
откроются.
cargo test --workspace
cargo clippy --workspace --all-targetsДля проверки движка без окна есть консольный плеер: cargo run -p nyanoto-cli -- play ПАПКА.
Список остальных команд он покажет, если запустить его без аргументов.
| Часть | Что там |
|---|---|
crates/nyanoto-core |
движок: декодирование, вывод звука, ресемплинг, скорость, эквалайзер, проверка подлинности, свои декодеры TTA и DSD, обёртки над эталонными библиотеками |
crates/nyanoto-library |
сканер, теги, база SQLite, поиск, плейлисты, статистика, плейлист дня |
crates/nyanoto-app |
окно на Slint: разметка для компьютера в ui/, для телефона в ui/mobile/ и вся логика |
crates/nyanoto-android |
точка входа на Android |
crates/nyanoto-cli |
консольный плеер и утилиты для проверок |
crates/nyanoto-testkit |
помощники для тестов |
packaging/ |
значки, ярлык для Linux, Java-часть и сборка APK |
docs/ |
таблица форматов и скриншоты |
Логика у компьютера и телефона общая, отличается только разметка. Набор свойств и команд окна задан в
ui/app.slint, а при сборке под Android он подставляется в ui/mobile/app.slint.
Nyanoto распространяется под GNU GPL версии 3 или новее.
Чужой код и шрифты внутри:
| Что | Лицензия |
|---|---|
| Slint | GPL-3.0 |
| Symphonia | MPL-2.0 |
| libopus | BSD-3-Clause |
| libwavpack 5.9 | BSD-3-Clause |
| Monkey's Audio SDK 13.27 | BSD-3-Clause |
| libmpcdec (Musepack r495) | BSD-3-Clause |
| Signalsmith Stretch | MIT |
| FFmpeg 7.1, загружается при работе | LGPL-2.1+ |
| шрифты Oswald, Playfair Display, Great Vibes, Unbounded, Press Start 2P, JetBrains Mono | SIL OFL 1.1 |
Тексты лицензий лежат рядом с исходниками, в crates/nyanoto-core/vendor/* и
crates/nyanoto-app/fonts/. Версии основных зависимостей можно посмотреть в самом плеере:
Настройки → О приложении → Компоненты и лицензии.





