Skip to content
dheijl edited this page May 3, 2025 · 15 revisions

Welcome to the swyh-rs wiki!

1. Building swyh-rs yourself

1.1 Versions before 1.9.4

Except for fltk-rs building is straightforward: installing latest stable rust, cloning this repo and running cargo build or cargo build --release is all that is needed.

However, fltk-rs depends on FLTK (Fast Light Tool Kit), a C/C++ library. The swyh-rs version on GitHub will try to build this library, and for this you need C/C++ development tools (MSVC or GCC, CMake, Ninja-build), please refer to fltk-rs - Dependencies for information on this topic.

fltk-rs has an option (feature in Cargo.toml) to use a "bundled" version of FLTK for most platforms, and if you use this option in Cargo.toml you don't have to build FLTK and so don't need a C/C++ development environment. But be aware that this option may disappear in future versions of fltk-rs.

To activate this feature change the following line in Cargo.toml (see fltk-rs - Features):

fltk = { version = "0.12.0", features = ["use-ninja"] }

to

fltk = { version = "0.12.0", features = ["fltk-bundled"] }

But a C/C++ compiler is needed anyway for building libflac (FLAC support) that comes with versions 1.4 and later.

1.2 From versions 1.9.4 and onward you need to specify a feature, either cli or gui, for building (with "gui" being the default):

To be able to build the CLI version (swyh-rs-cli) without pulling in fltk-rs and dependencies, I had to use 2 features in Cargo.toml: "cli" and "gui" (like in the buildall script).

  • to build the cli, use: cargo build --bin swyh-rs-cli --features cli --release --no-default-features
  • to build the gui, use: cargo build --bin swyh-rs --features gui --release or just cargo build --release

If you do not specify a feature, the "gui" version is built (the default feature).

For Linux (I use Ubuntu/Debian) you have to install the prerequisites and change some firewall rules:

  • install libraries to enable compiling fltk-rs:

    • sudo apt-get install libx11-dev libxext-dev libxft-dev libxinerama-dev libxcursor-dev libxrender-dev libxfixes-dev libpango1.0-dev libgl1-mesa-dev libglu1-mesa-dev
  • install libasound2-dev to enable compiling the rust cpal sound library:

    • sudo apt-get install libasound2-dev
  • enable ufw rules for DLNA/UPNP and swyh-rs streaming:

    • sudo ufw allow in from 192.168.0.0/24 to any port 1900 proto udp
    • sudo ufw allow in from fc00::/7 to any port 1900 proto udp
    • sudo ufw allow in from 192.168.0.0/24 to any port 32000:60000 proto udp
    • sudo ufw allow in from fc00::/7 to any port 32000:60000 proto udp
    • sudo ufw allow in from 192.168.0.0/24 to any port 5901 proto tcp
    • sudo ufw allow in from fc00::/7 to any port 5901 proto tcp
    • sudo ufw reload

2. [OBSOLETE - Use the new CLI version] Running swyh-rs without a GUI in combination with the "Auto-reconnect" option (Windows only)

User @Silun had an interesting use case (see this issue): swyh-rs is used to stream to a Bubble-UPNP server that exposes a Chromecast as an UPNP/DLNA renderer, but once this is configured with autoreconnect @Silun wanted to get rid of the GUI completely, and devised this clever trick:

I use this Python script which is located in the same folder as swyh-rs.exe:

import subprocess

def startProgram(target):
    SW_HIDE = 0
    info = subprocess.STARTUPINFO()
    info.dwFlags = subprocess.STARTF_USESHOWWINDOW
    info.wShowWindow = SW_HIDE
    subprocess.Popen(target, startupinfo=info)

program = r'swyh-rs.exe'

startProgram(program)

It will run swyh-rs.exe while suppressing the window completely. I put a shortcut to it in shell:startup so it will run automatically on user logon. This does what I wanted to accomplish, it just works now, without any window showing up.

@Silun has also made a small tool that allows you to hide swyh-rs in the system tray: Trayify: It's a small windows utility to run any program while hiding its window, and also add a tray icon to quickly toggle the window's visibility.

3. Automatically downloading the latest release (Windows)

@ksz16 made this script for downloading the latest release with a script (issue #34):

Maybe it will be useful for someone. Tested on Windows 7 with Cygwin installed and curl and grep added to PATH.

FOR /F "tokens=*" %%G IN ('curl -s https://api.github.com/repos/dheijl/swyh-rs/releases/latest ^| grep -oP '^"tag_name^": ^"\K^(.*^)^(^?^=^"^)'') DO set LATEST=%%G curl -L https://github.com/dheijl/swyh-rs/releases/latest/download/swyh-rs-%LATEST%.zip -o %TEMP%\swyh-rs-%LATEST%.zip

@ksz16 also made a complete setup script that integrates the system-tray tool made by @Silun: see issue #35

4. Using ASIO

swyh-rs is built using CPAL without ASIO support. You can still use ASIO though by using VB-Audio HiFi Cable with ASIO Bridge:

According to @mg2c : Using “Hifi Cable Asio Bridge” I can access my RME Fireface UFX II external ASIO soundcard, “connect” it to SWYH-RS and get it to play up to 192kHz/16bit to the Marantz AV7705 AV preamp. So full ASIO support is a given using this bridge.

5. Sonos stuttering

Some information that may help if you experience Sonos stuttering, from @ibaraki-douji:

For some reasons i don't have the stutters anymore (updated from 1.11.6 to 1.12.6).

On windows i'm using (listen to a sonos device) :

  • FMT: Wav
  • unchecked 24 bits
  • checked Inject silence (avoid disconnect from sonos)
  • initial buffer : 500ms
  • StrmSize: NoneChunked

With that, no more stutter neither increase delay. (just after 8h the audio stop playing, but maybe it's the sonos itself, since it does not happen on the second setup)

On linux i'm using (ffmpeg listen and play the .wav served by SWYH) :

  • FMT: Wav
  • checked 24 bits
  • checked Inject silence (silence was stopping the ffmpeg listen without stopping the CLI)
  • initial buffer : 0ms
  • StrmSize: U32maxNotChunked