Sobre el proyecto
swyh-rs es una reimplementación en Rust, con licencia MIT, de la idea original de Stream-What-You-Hear (SWYH): captura el audio que se está reproduciendo actualmente en un PC con Windows o Linux y lo transmite a reproductores de música en red. El autor lo escribió en parte para aprender Rust, y porque el original era solo para Windows, tenía problemas con algunos receptores y arrastraba una fuga de memoria de una antigua biblioteca UPnP de .NET.
Cómo funciona: al iniciarse captura audio desde la fuente seleccionada (WasApi en Windows, ALSA en Linux) mediante la biblioteca cpal, inicia un servidor de streaming HTTP integrado en un puerto configurable (por defecto 5901), ejecuta el descubrimiento SSDP para encontrar receptores UPnP/DLNA/OpenHome en la LAN y muestra un botón por cada receptor descubierto. Al hacer clic en un botón se indica al receptor (OpenHome o AVTransport) que reproduzca el stream. El descubrimiento se vuelve a ejecutar periódicamente en segundo plano. Desde la versión 1.21.0 también habla directamente el protocolo SlimProto, por lo que los clientes squeezelite se descubren y controlan sin necesidad de Logitech Media Server/Lyrion.
Los formatos de streaming son únicamente sin pérdida: FLAC de 16/24 bits (preferido), WAV, RF64 y LPCM (audio/l16). No hay recodificación con pérdida a MP3/AAC. El audio se transmite a la frecuencia de muestreo de la fuente. El stream también es accesible como una URL de radio por internet local, como http://{ip}:5901/stream/swyh.flac, con parámetros de consulta para la profundidad de bits y el modo de tamaño del stream.
La GUI (fltk-rs) tiene pestañas Audio, Network, App y Status. Las opciones incluyen fuente de audio y frecuencia de muestreo, formato de streaming, modo de 24 bits, cinco modos de fragmentación HTTP/Content-Length, almacenamiento en búfer inicial, dithering TPDF para 16 bits, inyección de silencio para mantener conectados los receptores, selección de interfaz de red, puerto HTTP, intervalo SSDP (0 desactiva el descubrimiento para el modo de solo servidor), activación manual del descubrimiento, idioma y tema de la interfaz, nivel de registro, reanudación automática, reconexión automática, monitor de nivel RMS y activación/desactivación de SlimProto. Los botones de los receptores se pueden ocultar haciendo clic con el botón derecho; aparece un control deslizante de volumen cuando es compatible, y al arrastrar con Shift se copia el volumen a todos los receptores activos. Se pueden ejecutar varias instancias con archivos de configuración separados para transmitir distintas fuentes a distintos receptores simultáneamente.
Las notas de compatibilidad del README mencionan pruebas con MoOde, Volumio, Denon Heos, Sonos, Roon, Yamaha, Kef, Chromecast mediante Bubble UPnP, Squeezebox/squeezelite y otros, con advertencias específicas de cada dispositivo sobre formato y tamaño del stream. Los problemas conocidos incluyen requisitos de firewall/puertos (5901 para HTTP, 3483 para SlimProto), la configuración de monitorización de audio en Linux, un retardo de análisis de FFMPEG de 5 segundos con WAV/RF64/LPCM en reproductores basados en MPD, y un requisito de VCRUNTIME140.dll en instalaciones nuevas de Windows. Se proporcionan binarios para Windows x86/64 y appimages de Linux; las compilaciones para ARM se enlazan desde un tercero. El proyecto consume pocos recursos (aproximadamente menos de 8 MB de RAM) e incluye un binario CLI y un icono de bandeja de Python de la comunidad.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.