Об этом проекте
swyh-rs — это переписанная на Rust под лицензией MIT реализация исходной идеи Stream-What-You-Hear (SWYH): она захватывает звук, воспроизводимый в данный момент на ПК с Windows или Linux, и передаёт его на сетевые музыкальные плееры. Автор написал её отчасти для изучения Rust, а также потому, что оригинал работал только под Windows, испытывал проблемы с некоторыми рендерерами и нёс утечку памяти из старой библиотеки .NET UPnP.
Как это работает: при запуске программа захватывает звук из выбранного источника (WasApi в Windows, ALSA в Linux) через библиотеку cpal, запускает встроенный HTTP-сервер потокового вещания на настраиваемом порту (по умолчанию 5901), выполняет SSDP-обнаружение для поиска рендереров UPnP/DLNA/OpenHome в локальной сети и отображает по кнопке для каждого найденного рендерера. Нажатие кнопки даёт рендереру (OpenHome или AVTransport) команду воспроизводить поток. Обнаружение периодически повторяется в фоне. Начиная с версии 1.21.0 программа также напрямую поддерживает протокол SlimProto, поэтому клиенты squeezelite обнаруживаются и управляются без необходимости в Logitech Media Server/Lyrion.
Форматы потоковой передачи только без потерь: 16/24-битный FLAC (предпочтительный), WAV, RF64 и LPCM (audio/l16). Никакого перекодирования в сжатые MP3/AAC. Звук передаётся с частотой дискретизации источника. Поток также доступен как локальный URL интернет-радио, например http://{ip}:5901/stream/swyh.flac, с параметрами запроса для разрядности и режима размера потока.
В GUI (fltk-rs) есть вкладки Audio, Network, App и Status. Среди опций — источник звука и частота дискретизации, формат потока, 24-битный режим, пять режимов HTTP-чанкинга/Content-Length, начальная буферизация, TPDF-дизеринг для 16 бит, вставка тишины для поддержания соединения с рендерерами, выбор сетевого интерфейса, HTTP-порт, интервал SSDP (0 отключает обнаружение для режима только сервера), ручной запуск обнаружения, язык и тема интерфейса, уровень логирования, авто-возобновление, авто-переподключение, монитор уровня RMS и включение/отключение SlimProto. Кнопки рендереров можно скрыть правым щелчком; при поддержке появляется ползунок громкости, а перетаскивание с зажатым Shift копирует громкость на все активные рендереры. Можно запускать несколько экземпляров с отдельными файлами конфигурации, чтобы одновременно передавать разные источники на разные приёмники.
В примечаниях о совместимости в README упоминается тестирование с MoOde, Volumio, Denon Heos, Sonos, Roon, Yamaha, Kef, Chromecast через Bubble UPnP, Squeezebox/squeezelite и другими, с оговорками по форматам и размеру потока для конкретных устройств. Известные проблемы включают требования к брандмауэру/портам (5901 для HTTP, 3483 для SlimProto), настройку мониторинга звука в Linux, 5-секундную задержку анализа FFMPEG с WAV/RF64/LPCM на плеерах на базе MPD и необходимость VCRUNTIME140.dll на свежих установках Windows. Предоставлены бинарные сборки для Windows x86/64 и appimage для Linux; сборки для ARM доступны по ссылке от третьей стороны. Проект отличается малым потреблением ресурсов (примерно менее 8 МБ ОЗУ) и включает CLI-бинарник и значок в трее на Python от сообщества.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.