Сегодня немного не про разработку. https://github.com/navidrome/navidrome Бесплатный музыкальный сервер с открытым исходным кодом, который позволяет создать собственный аналог Spotify или Яндекс Музыки на своем оборудовании. С его помощью можно транслировать личную коллекцию аудиофайлов на любые устройства через браузер или мобильные приложения.
- Высокая производительность: сервер потребляет крайне мало ресурсов и стабильно работает даже с огромными музыкальными библиотеками на слабых устройствах, включая Raspberry Pi.
- Кроссплатформенность: работает на Linux, macOS и Windows, а также легко разворачивается через Docker.
- Широкая совместимость: поддерживает практически все аудиоформаты и умеет кодировать на лету (например, в Opus) под конкретное устройство или скорость интернета.
- Поддержка API Subsonic: благодаря этому Navidrome совместим с десятками готовых сторонних плееров для iOS, Android и десктопа (например, Symfonium, Amperfy, substreamer).
- Многопользовательский режим: каждый пользователь имеет свои списки воспроизведения, избранное и историю прослушиваний.
- Умный интерфейс: веб-панель автоматически подтягивает метаданные, поддерживает темы оформления, отображает тексты песен (из файлов или встроенных тегов) и корректно группирует сборники и многодисковые альбомы. Из минусов - нельзя "с коробки" организовать "folder based" плейлисты. Медиатека группируется по исполнителям. Решается несложно: пишем небольшой скрипт, который пробегается по папкам и формирует в каждой m3u файл. #!/bin/bash
for dir in */; do
#Проверяем, является ли элемент папкойif [ -d "$dir" ]; then
#Убираем слеш в конце названия папки для имени файлаplaylist_name="${dir%/}.m3u"
#Очищаем или создаем пустой плейлист с заголовком M3Uecho "#EXTM3U" > "$playlist_name"
#Ищем аудиофайлы внутри папки (без учета регистра) #Если файлы найдены, добавляем их пути в плейлистfind "$dir" -maxdepth 1 -type f ( -iname ".mp3" -o -iname ".flac" -o -iname ".wav" -o -iname ".m4a" -o -iname "*.ogg" ) | sort >> "$playlist_name"
#Проверяем, добавилось ли что-то кроме заголовка. #Если в папке не было музыки, удаляем пустой плейлист.if [ $(wc -l < "$playlist_name") -eq 1 ]; then rm "$playlist_name" else echo "Создан плейлист: $playlist_name" fi fi done Нашёл интересное применение: Я являюсь мастером НРИ (Настольные Ролевые Игры) и хотел иметь под рукой собранные плейлисты под окружение. Поставил navidrome, создал пачку m3u под темы (путешествие, сражение, трактир и т.д.) - теперь под рукой собственный стриминг, который не зависит от внешних подписок, рекламы и т.д.