Консольный музыкальный плеер с терминальным интерфейсом (TUI): Яндекс.Музыка, локальная медиатека, радио, визуализация спектра.
YamBassPlayer — кроссплатформенный музыкальный плеер с текстовым интерфейсом. Воспроизводит музыку из Яндекс.Музыки и из локальной медиатеки (папки с файлами), содержит 8 режимов визуализации спектра, 10-полосный эквалайзер, персональное радио («Моя волна»), тексты песен и ASCII-обложки.
- Воспроизведение из Яндекс.Музыки с предзагрузкой следующего трека
- Локальная медиатека: добавление папок, сканирование, чтение ID3-тегов (TagLib#)
- Радио: «Моя волна» (персональная и по треку)
- Тексты песен с кэшированием в SQLite
- ASCII-обложки в панели трека, крупном инфо и «Моей волне»
- 8 режимов визуализации спектра в реальном времени
- 10-полосный эквалайзер с сохранением настроек
- 7 тем оформления
- Управление плейлистами: персональные плейлисты, избранное, плейлист дня, умные топы по истории
- Полный контроль воспроизведения (play, pause, stop, prev, next, seek, режимы seq/shuffle)
- Кэширование треков для офлайн-прослушивания
- Избранное: локальное и с синхронизацией в Яндекс.Музыку
- Поиск по локальной медиатеке и Яндекс.Музыке (треки, исполнители, альбомы)
- Командная строка прямо в интерфейсе
- История прослушивания со статистикой
- Кроссплатформенность (Windows, Linux, macOS)
- .NET 8.0
- Terminal.Gui 1.19.0 — TUI
- ManagedBass 4.0.2 + ManagedBass.Fx — воспроизведение, эквалайзер, FFT
- KM.Yandex.Music.Api 2.0.6 — API Яндекс.Музыки
- SQLite (Microsoft.Data.Sqlite 10.0.0) — локальное хранилище
- Autofac 8.1.1 — DI-контейнер
- TagLibSharp 2.3.0 — метаданные аудиофайлов
- SixLabors.ImageSharp 3.1.6 — обработка обложек для ASCII-рендера
- Microsoft.Extensions.Configuration — загрузка
appsettings.json
- .NET 8.0 SDK или выше
- Токен Яндекс.Музыки
-
Клонируйте репозиторий:
git clone https://github.com/Blesya/YaBassPlayer.git cd YaBassPlayer -
Соберите проект (в папке, где лежит
.sln):cd YamBassPlayer dotnet build -
Запустите приложение:
dotnet run --project YamBassPlayer
-
При первом запуске откроется диалог ввода токена. Введите токен Яндекс.Музыки и нажмите OK.
Для работы приложения необходим токен авторизации Яндекс.Музыки:
- Навигация: клавиши
↑↓←→ Enter— воспроизведение трека или выбор плейлиста, двойной клик — воспроизведение- Поле над списком треков фильтрует текущий плейлист по тексту
Alt— меню,Ctrl+Cили «Файл» → «Выход» — выход
| Клавиша | Действие |
|---|---|
F5 |
«Сейчас играет» — полноэкранная визуализация |
F8 |
Крупное инфо о треке |
F9 |
«Моя волна» |
ё / ~ |
Фокус на командную строку |
Строка ввода находится под панелью воспроизведения (фокус — ё/~).
| Команда | Алиасы | Описание |
|---|---|---|
play |
p |
Воспроизвести/возобновить; play N — играть N-й трек очереди |
pause |
ps |
Пауза |
toggle |
t |
Пауза/воспроизведение |
stop |
s |
Остановить |
next |
n |
Следующий трек |
prev |
b |
Предыдущий трек |
restart |
r |
Перезапустить текущий трек |
seek <0-100> |
Перемотать на процент | |
mode <seq|shuffle> |
Режим воспроизведения | |
queue |
q |
Показать состояние очереди |
eq [reset|<1-10> <0-10>] |
Эквалайзер: значения / сброс / установка полосы | |
search [ya] [-t|-ar|-alb] <текст> |
find |
Поиск (по умолчанию локально; ya — Яндекс.Музыка) |
now |
track |
Текущий трек |
clear |
Очистить строку результата | |
likeyandex |
ly |
Добавить/убрать текущий трек в избранное Яндекс.Музыки |
likelocal |
ll |
Добавить/убрать текущий трек в локальное избранное |
help |
? |
Справка по всем командам |
- Мои треки — понравившиеся треки Яндекс.Музыки
- Плейлист дня и персональные плейлисты из аккаунта Яндекс.Музыки
- Локальное избранное — избранные треки, сохранённые локально
- Загруженные — треки из локального кэша
- Локальная медиатека — папки, исполнители и альбомы отсканированной библиотеки
- Топ 10, Топ вечеров, Топ по дням — умные подборки на основе истории
Результаты поиска, «Моя волна» и текущая очередь загружаются как временные плейлисты.
- Файл → Выход
- Темы → выбор из 7 тем оформления
- Аудио → Эквалайзер
- Инструменты → Локальный поиск, Поиск по ЯМ, Моя волна, Моя волна по треку, Статистика БД, Добавить папку…, Управление папками…, Сканировать библиотеку
- Вид → Визуализация, Крупное инфо, Переключить режим спектра, Вид треков (Плитки/Таблица)
- Добавить папку… — добавить папку с музыкой (mp3, flac, ogg, wav, m4a); метаданные читаются из ID3-тегов, при повреждённых тегах — из имени файла
- Сканировать библиотеку — индексирует все добавленные папки
- Управление папками… — просмотр и удаление добавленных папок
- Исполнители и альбомы локальной медиатеки появляются отдельными ветками в дереве плейлистов
Проект построен на паттерне MVP с внедрением зависимостей через Autofac (ServicesProvider.cs). Каждый компонент имеет интерфейс (I*) и реализацию в подпапке Impl/. Слой сервисов (32 интерфейса) инкапсулирует работу с аудио (BASS), Яндекс.Музыкой, SQLite и локальными файлами; слой презентеров (17) связывает представления (9 интерфейсов) с сервисами. Сквозная логика воспроизведения собрана в MainWindowCoordinator, который обрабатывает события IEventBus от UI-кнопок и командной строки. Данные хранятся в SQLite (tracks_cache.db), аудиофайлы кэшируются в tracks/, обложки — в covers/, настройки (токен, эквалайзер, тема) — в appsettings.json.
dotnet test # 240+ NUnit-тестов (команды, модели, сервисы, SQLite)Если вам понравился проект, поставьте звезду на GitHub!