Skip to content

Latest commit

 

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

YamBassPlayer

Консольный музыкальный плеер с терминальным интерфейсом (TUI): Яндекс.Музыка, локальная медиатека, радио, визуализация спектра.

.NET Platform License

image

Описание

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 или выше
  • Токен Яндекс.Музыки

Шаги установки

  1. Клонируйте репозиторий:

    git clone https://github.com/Blesya/YaBassPlayer.git
    cd YaBassPlayer
  2. Соберите проект (в папке, где лежит .sln):

    cd YamBassPlayer
    dotnet build
  3. Запустите приложение:

    dotnet run --project YamBassPlayer
  4. При первом запуске откроется диалог ввода токена. Введите токен Яндекс.Музыки и нажмите OK.

    image

Получение токена Яндекс.Музыки

Для работы приложения необходим токен авторизации Яндекс.Музыки:

MarshalX/yandex-music-api#513

Использование

Управление интерфейсом

  • Навигация: клавиши
  • 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!

About

Консольный аудиоплеер для работы с локальной музыкой и с Яндекс.Музыка.

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Contributors

Languages