← Kód máme venku

NKS AudioLink

Přenos zvuku z počítače s Windows do zvukové karty linuxového stroje v místní síti po UDP. Aplikace ve WPF, příkazová řádka a služba pro ALSA.

Náhled NKS AudioLink

Zesilovač a reproduktory jsou zapojené do linuxového počítače, který stojí u nich a dělá třeba domácí server. Hudba, filmy a hovory ale hrají na počítači s Windows o místnost dál. NKS AudioLink zachytí zvuk ve Windows, pošle ho po místní síti a linuxový stroj ho přehraje na své zvukové kartě. Na Linuxu přitom nemusí běžet grafické prostředí, PulseAudio ani PipeWire, stačí ALSA a systemd.

Proč ne Scream, Snapcast nebo VBAN

Zvuk po síti umí několik otevřených projektů a každý míří jinam. Scream na Windows instaluje virtuální zvukovou kartu, tedy ovladač, který potřebuje práva správce, a umí vysílat na víc přijímačů najednou. Snapcast synchronizuje přehrávání ve více místnostech, zvuk z Windows je ale potřeba nejdřív dostat do některého z jeho zdrojů. VBAN s Voicemeeterem je mixážní pult s virtuálními zařízeními, jehož instalace chce restart. SonoBus spojuje víc účastníků peer-to-peer pro společné hraní a nahrávání.

NKS AudioLink řeší užší úkol: jeden počítač s Windows, jeden linuxový přijímač. Repozitář má k tomu srovnání podle dokumentace jednotlivých projektů ověřené 23. října 2026. Výkon, zpoždění ani zotavení ostatních projektů se v něm neměřily, takže to není tvrzení, že některý hraje lépe. Tyto protokoly jsou navzájem nekompatibilní a AudioLink do jejich přijímačů posílat neumí.

Co z toho uživatel má

  • Žádný ovladač navíc. Celý výstup zvukové karty zachytí přes WASAPI, rozhraní, které je ve Windows. Virtuální zařízení VB-CABLE je jen volitelný čtvrtý režim a instaluje se zvlášť.
  • Jen jedna aplikace. Zachytit jde i jediný proces s jeho podprocesy, třeba přehrávač, zatímco upozornění ostatních programů zůstanou na počítači. Výchozí zvukový výstup Windows se přitom nemění. Režim potřebuje aktualizované Windows 10 (2004 nebo novější) či Windows 11 a vyzkoušený je na sestavení 19045.
  • Server bez obrazovky. Na Linuxu běží jako služba systemd pod neprivilegovaným uživatelem nks-audiolink ve skupině audio. Zvukovou kartu otevře, až když přijme relaci, a 5 sekund po posledním paketu ji uvolní pro jiné programy.
  • Vyrovnávací paměť se nastaví sama. Ručně jde zvolit 20, 40 nebo 80 ms, v automatickém režimu ji AudioLink drží mezi 20 a 100 ms podle toho, jak pakety chodí. Snižuje ji po krocích 5 ms až po 30 sekundách čistého přehrávání a zvýší ji po třech potvrzeních, že hrozí výpadek. Při desetiminutovém běhu na skutečné zvukové kartě klesla za dvě minuty ze 40 na 20 ms a tam zůstala.
  • Po výpadku se připojí sám. Klient se po restartu serveru připojil do pěti sekund a po probuzení Windows z režimu spánku za 11,72 s. Desetisekundový výpadek UDP spojení zvládá také. Když selže zvukové zařízení, klient si zachytávání vytvoří znovu.
  • Vidět je, co se děje. Klient ukazuje zaplnění bufferu, odezvu sítě, ztracené a opožděné rámce a stereo měřiče s indikací přebuzení. Umí ztlumit zvuk, zapnout omezovač špiček a zkopírovat diagnostiku, ze které odstraní identifikátory serveru, zařízení a uživatele i sdílený klíč.
  • Server skoro nic nestojí. Při desetiminutovém běhu s automatickou vyrovnávací pamětí a webovým přehledem vytížil 1,548 % jednoho jádra procesoru.
Webový přehled serveru AudioLink: stav přijímače Streaming s parametry 48 kHz, 16 bit, stereo, hodnoty bufferu, výstupní fronty a korekce hodin, měřiče levého a pravého kanálu, počítadla ztracených rámců a chyb ALSA a grafy historie
Webový přehled serveru: úrovně signálu, stav bufferu, chyby výstupu ALSA a jejich historie za posledních 15 minut.

Jak zvuk projde sítí

Zvuk jde jako nekomprimované PCM, 48 kHz, 16 bitů, stereo, v rámcích po 5 ms. Server poslouchá na UDP portu 7355 a obslouží vždy jednu relaci; druhého odesílatele odmítne a ten ho může výslovně převzít. Klient server v síti najde sám, rozesláním dotazu do všech sítí, ke kterým je počítač připojený. Každé dvě sekundy posílá zprávu, že spojení žije. Server průběžně vyrovnává rozdíl mezi hodinami obou počítačů a tiché rámce drží časovou osu zvuku i ve chvílích, kdy nic nehraje.

Zpoždění od zdroje po reproduktor fyzicky změřené není. Aplikace během provozu odhadovala 71 až 82 ms a jeden rozpis kroků dává asi 74 ms: 10 ms zachycení, zhruba 15 ms fronta klienta, 5 ms rámec, čtvrt milisekundy síť, 25 ms buffer serveru a 19 ms fronta ALSA. Samotný síťový úsek od odeslání ve Windows po zápis na Linuxu změřený je: devět kliknutí trvalo 22,96 až 37,88 ms, medián 31,39 ms.

Kde se to hodí

  • Domácí server nebo malý počítač u zesilovače, ke kterému se posílá zvuk z pracovního počítače.
  • Zvuková karta nebo převodník, který má ovladače pro Linux, ale ne pro aktuální Windows.
  • Pracovna, kde se hudba z jednoho přehrávače má pouštět do reproduktorů jinde, bez upozornění z pošty a chatu.

Hardware jiného počítače po síti zpřístupňuje i NKS UsbShare: místo zvukové karty sdílí flashky, telefony a další USB zařízení.

Co server pustí dovnitř

Ve výchozím nastavení server přijímá jen místní spojení a zvuk zahazuje. Před použitím v síti se v /etc/nks-audiolink/server.json nastaví povolené adresy (allowCidrs) a zvukové zařízení. Pakety může podepisovat sdíleným klíčem: každý nese 16 bajtů HMAC-SHA256 a server bez platného podpisu paket potichu zahodí. Šifrovaný ale zvuk není, proto AudioLink patří do důvěryhodné místní sítě nebo VPN.

Webový přehled je volitelný, jen pro čtení a ve výchozím stavu poslouchá na 127.0.0.1:7356. Nemá přihlášení ani TLS, takže do jiné sítě se vystavuje přes tunel SSH nebo na konkrétní adresu v místní síti. Sdílený klíč nevrací a klient ho neukládá do souboru s nastavením.

Stav projektu

Aktuální verze je kandidát na vydání 0.1.0-rc.3 z 23. října 2026, na GitHubu označený jako předběžná verze. Prošlo 171 přenositelných testů, 57 testů klienta pro Windows, 16 testů webového přehledu a 36 testů balíčků; testy pokrývají 96,52 % řádků jádra. Před vydáním 0.1.0 zbývají dvě ruční zkoušky: posouzení synchronizace zvuku s videem a fyzické odpojení síťového kabelu. Formát je pevný, 48 kHz a 16 bitů stereo. Přehrávání ve více místnostech ani spolupráci s jinými protokoly AudioLink nemá.

Ke stažení

Přenosné balíčky jsou v GitHub Releases, i se souborem kontrolních součtů. Archiv pro Windows x64 (127 MB) obsahuje aplikaci NksAudioLink.App.exe a příkazovou řádku, archiv pro Linux x64 (43 MB) server a instalační skript. Oba mají přibalené běhové prostředí .NET 9.0.20. Aplikace pro Windows potřebuje Windows 10 nebo novější, po zavření okna zůstane v oznamovací oblasti a může se spouštět s přihlášením. V obchodech s aplikacemi AudioLink není.

sh deploy/linux/install.sh ./NksAudioLink.Server
# upravit /etc/nks-audiolink/server.json: sink, allowCidrs, pskBase64
systemctl enable --now nks-audiolink

Ve Windows se pak v aplikaci zadá adresa serveru nebo se použije tlačítko Find, vybere zdroj a stiskne Connect.

Zdrojový kód

Kód je na github.com/nks-hub/nks-audiolink pod licencí MIT, napsaný v C# na .NET 9. Knihovna NAudio, přes kterou klient zachytává zvuk, má vlastní licenci MIT. Ze zdrojů se projekt sestaví s .NET SDK 9.0.203 nebo novějším z řady 9.0.

← Zpět na přehled