Skip to content
LycorisWavePublic

About

Локальный аудиоплеер для Linux, Windows и Android

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

Nyanoto

Плеер для музыки, которая лежит у вас файлами. Работает на Linux, Windows и Android.

English

Версия 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.

Как начать

  1. Скачайте сборку из релизов или соберите сами (см. ниже) и запустите nyanoto.
  2. Нажмите «Выбрать папку с музыкой».
  3. Плеер спросит, как её разбирать. Если музыка разложена по папкам исполнителей и альбомов, выбирайте «По папкам». Если всё свалено в одну кучу, то «По тегам».
  4. Подождите, пока пройдёт сканирование, его видно по тонкой полоске под заголовком.

Папку можно добавить и при запуске: 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 и собираются вместе с плеером, ставить их отдельно не нужно.

Linux

# 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.

Windows

cargo build --release -p nyanoto-app

Собирается через MSVC. Из Linux можно собрать кросс-компилятором llvm-mingw под цель x86_64-pc-windows-gnullvm. Значок программы: packaging/windows/nyanoto.ico.

Android

Понадобятся 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

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/. Версии основных зависимостей можно посмотреть в самом плеере: Настройки → О приложении → Компоненты и лицензии.

About

Локальный аудиоплеер для Linux, Windows и Android

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages