Sobre o projeto

swyh-rs é uma reimplementação em Rust, licenciada sob MIT, da ideia original do Stream-What-You-Hear (SWYH): ele captura o áudio que está sendo reproduzido em um PC Windows ou Linux e o transmite para players de música em rede. O autor o escreveu em parte para aprender Rust, e porque o original era apenas para Windows, tinha problemas com alguns renderizadores e carregava um vazamento de memória de uma antiga biblioteca UPnP .NET. Como funciona: na inicialização, ele captura áudio da fonte selecionada (WasApi no Windows, ALSA no Linux) através da biblioteca cpal, inicia um servidor de streaming HTTP integrado em uma porta configurável (padrão 5901), executa a descoberta SSDP para encontrar renderizadores UPnP/DLNA/OpenHome na LAN e exibe um botão por renderizador descoberto. Clicar em um botão instrui o renderizador (OpenHome ou AVTransport) a reproduzir o stream. A descoberta é executada novamente periodicamente em segundo plano. Desde a versão 1.21.0, ele também fala o protocolo SlimProto diretamente, então clientes squeezelite são descobertos e controlados sem precisar do Logitech Media Server/Lyrion. Os formatos de streaming são apenas sem perdas: FLAC de 16/24 bits (preferido), WAV, RF64 e LPCM (audio/l16). Sem recodificação com perdas MP3/AAC. O áudio é transmitido na taxa de amostragem da fonte. O stream também é acessível como uma URL de rádio pela internet local, como http://{ip}:5901/stream/swyh.flac, com parâmetros de consulta para profundidade de bits e modo de tamanho do stream. A GUI (fltk-rs) tem abas Audio, Network, App e Status. As opções incluem fonte de áudio e taxa de amostragem, formato de streaming, modo de 24 bits, cinco modos de chunking/Content-Length HTTP, buffering inicial, dithering TPDF para 16 bits, injeção de silêncio para manter os renderizadores conectados, seleção de interface de rede, porta HTTP, intervalo SSDP (0 desativa a descoberta para modo somente serve), acionamento manual da descoberta, idioma e tema da UI, nível de log, retomada automática, reconexão automática, monitor de nível RMS e ativação/desativação do SlimProto. Os botões dos renderizadores podem ser ocultados com o botão direito; um controle deslizante de volume aparece quando suportado, e Shift-arrastar copia o volume para todos os renderizadores ativos. Várias instâncias podem ser executadas com arquivos de configuração separados para transmitir fontes diferentes para receptores diferentes simultaneamente. As notas de compatibilidade no README mencionam testes com MoOde, Volumio, Denon Heos, Sonos, Roon, Yamaha, Kef, Chromecast via Bubble UPnP, Squeezebox/squeezelite e outros, com ressalvas específicas de dispositivo sobre formato e tamanho do stream. Problemas conhecidos incluem requisitos de firewall/porta (5901 para HTTP, 3483 para SlimProto), configuração de monitoramento de áudio no Linux, um atraso de análise de 5 segundos do FFMPEG com WAV/RF64/LPCM em players baseados em MPD e um requisito de VCRUNTIME140.dll em instalações novas do Windows. Binários são fornecidos para Windows x86/64 e appimages Linux; builds para ARM são vinculados a partir de terceiros. O projeto usa poucos recursos (aproximadamente menos de 8 MB de RAM) e inclui um binário CLI e um ícone de bandeja em Python da comunidade.