Git Product home page Git Product logo

swyh-rs's Introduction

swyh-rs

rs-tall

What is it

A "Stream-What-You-Hear" implementation written in Rust, MIT licensed.

Contents

Current Release

The current release is 1.10.8, refer to the Changelog for more details.

Why this SWYH alternative ?

swyh-rs implements the idea behind the original SWYH (source repo https://github.com/StreamWhatYouHear/SWYH) written in Rust. It allows you to stream the music you're currently playing on your PC (Windows or Linux) to an UPNP/DLNA/OpenHome compatible music player (a "Renderer").

I wrote this because

  • I wanted to learn Rust
  • SWYH does not work on Linux
  • SWYH did not work well with Volumio (push streaming did not work)
  • SWYH has a substantial memory leak due to the use of an old and unmaintained Intel .Net UPNP/DLNA library it uses.

NOTE swyh-rs does not support lossy mp3 or aac re-encoding, only lossess LPCM/WAV/RF64/FLAC for obvious reasons.

It has been tested with

  • Moode audio 8, with Moode configured as UPNP renderer in Openhome mode, and using FLAC (preferable) or LPCM (since 1.8.7) or WAV format. Note that the WAV format will cause MPD to issue 2 GET requests, one for the WAV header and another one for the PCM data.
  • Volumio
  • Harman Kardon AV network streamers (thanks @MX10-AC2N!)
  • Denon Heos devices
  • Sony AV streamers & Bravia TVs
  • Chromecast devices defined as an OpenHome or DLNA device in Bubble UPNP Server (thanks Bubblesoft for providing the necessary information!)
  • Sonos speakers/soundbars using the WAV format (thanks @Cunkers !). update: A recent update to the Sonos Play 1 also enabled FLAC. Depending on your network a Sonos may stutter when using WAV, if you are affected you should use FLAC if your device supports it. See issues #84 and #75. Software version "15.9 (Build 75146030)" on the Play:1 is known to support FLAC without stuttering (thanks @beWAYNE !).
    • If you want to pause music without losing the connection you have to enable the Inject Silence option. The InjectSilence flag is automatically added to the config file when you first start version 1.4.5 and defaults to false. Contributed by @genekellyjr, see issue #71, and @DanteDT. Note that Inject Silence is ineffective for FLAC, as the FLAC format will compress the silence away resulting in large gaps between the FLAC frames probably cutting the connection.
    • injecting silence will eat a neglegible amount of cpu cycles.
    • it seems that stuttering can occur with Sonos gear, especially with WiFi connections. You can try to set an initial buffering value to prevent this. According to @konyong installing ccproxy can also help, refer to issue #130 for more details.
  • Kef Wireless LS50 II (thanks @Turbomortel via Twitter)
  • Xbox 360, using Foobar2000 and entering the streaming url in foo_upnp (thanks @instinctualjealousy)
  • iEast Audiocast M5 using the WAV format header (thanks @Katharsas)
  • Yamaha WXAD-10 since 1.6.1 (see issue #89), and possibly other Yamaha devices?
  • for QPlay devices, like the Xiaomi S12, you need version 1.8.2 or later, see issue #99. Older versions wrongly try to use Openhome instead of AVTransport.
  • Roon with FLAC and using U32MaxChunked for streamsize (swyh-rs 1.10.5 and up). Thanks to @DrCWO for figuring this out (issue #55).

but any OpenHome/DLNA streamer that supports FLAC (except older Sonos software versions that do not do FLAC over upnp) will probably work (since version 1.4.0).

If a device supports both OpenHome and DLNA, the OpenHome endpoint is used, and the DLNA AVTransport endpoint is ignored.

Music is streamed with the sample rate of the music source (the chosen audio output device, I personally use VBAudio HiFi Cable Input as a bit-perfect audio source).

Supported audio streaming formats:

  • 16 bit or 24 bit FLAC (lossless compression, I'm using the lowest compression level for performance and latency reasons). It is available since version 1.4.0
  • audio/wav (16 bit) with a "maximum length" (4 GB) WAV header, available since version 1.3.5
  • uncompressed 16 bit LPCM format (audio/l16)
  • audio/rf64 (16 bit) basically WAV with unlimited size since version 1.9.1.

Note that older libsndfile based renderers may not be able to decode the WAV format, because the stream is not "seekable".

Audio is captured using the excellent Rust cpal library. fltk-rs is used for the GUI, as it's easy to use, and it's small, cross-platform, fast and works well. For FLAC encoding the of use flac-bound made adding FLAC encoding using the libflac-sys Rust bindings a breeze. This allowed me to link libflac statically in the swyh-rs binary, no dlls needed!

Tested on Windows 10 and on Ubuntu 20.04 LTS (Mint 20) and 22.04 LTS (Mint 21) with Raspberry Pi/Hifi-Berry based devices, currently running MoodeAudio 8.x. I don't have access to a Mac, so I don't know if this also works.

Because it is written in Rust it uses almost no resources (CPU usage barely measurable, Ram usage around or below 4 MB).

swyh-rs as your local internet radio

You can also use swyh-rs as an internet radio station on your local network. swyh-rs is available at

  • http://{your-pc-ip}/stream/swyh.raw when streaming LPCM format
  • http://{your-pc-ip}/stream/swyh.wav when streaming WAV format
  • http://{your-pc-ip}/stream/swyh.rf64 when streaming RF64 format
  • http://{your-pc-ip}/stream/swyh.flac when streaming FLAC format

You can append query parameters to the url for bits per sample (bd = bit depth, 16 or 24) and streamsize (ss: nonechunked, u32maxchunked, u64maxchunked, u32maxnotchunked, u64maxnotchunked). The query parmeters in the query string override the configured values.

Example: http://{your-pc-ip}/stream/swyh.flac?bd=24&ss=nonechunked

When running the CLI with the -x option, that is effectively the only way to access the swyh-rs audio server.

Where to get it and how to install

You can get the latest Windows binary from the Release page. No install needed, no runtime, no dependencies. Just unzip the binary in a convenient place and run it.

Debug build and a release builds and a setup for Windows 64 bit are included in the release assets, I also sometimes add a Linux (Ubuntu 20.04) binary. You would only ever need the debug build in the unlikely case rust "panics", and the program vanishes without a message. In a release build you will have a logging file in the .swyh-rs folder in your home directory. But when rust "panics" you can't log it, so you will need to start the debug build from a console/terminal window. A debug build automatically raises the log level to "DEBUG". This will also allow you to catch the Rust "panic" message in the console window (release builds do not have a console on Windows). Depending on the log level you set (info/warn/debug) the release build will provide all information needed to help in troubleshooting, aside from "panics".

If you want to build swyh-rs yourself, you can find some information in the wiki.

If it doesn't work for you, please open a new issue and include all the debug log level information. I will try to provide a fix ASAP.

Todo

  • I'm open to suggestions, but I definitely hate GUI programming...

Known problems

  • On linux you may have to enable audio monitoring with pavucontrol to make audio capture work
  • make sure that your firewall or anti-virus do not block the default incoming HTTP port 5901 for streaming requests (or the port number you configured in the UI if not the default), and that outgoing UDP traffic is allowed for SSDP
  • resizing a window in fltk 1.4 is not ideal, but thanks to @MoAlyousef it is now usable in swyh-rs. But if you resize vertically to a very small window you risk losing the horizontal scrollbar in the textbox at the bottom.
  • simultaneous streaming to multiple renderers is only limited by the number of renderer buttons that can be shown in the available space in the window.
  • Kaspersky Antivirus can prevent audio capture, so you may have to add an exception for swyh-rs (thanks @JWolvers).
  • streaming to Logitech Media Server does not work (issue # 40)
  • streaming to Linn devices does not work (due to Linn using partial requests with Range headers)
  • if for some reason your config file gets corrupted/invalid it will be replaced with a default configuration at startup instead of panic-ing when deserializing.

Artwork Credits

The icon was designed by @numanair, thanks!

How does it work?

  • audio is captured from the default audio device (WasApi on Windows, Alsa on Linux, not tested on Mac), but you can choose any audio source you want. Changing the sound source needs a restart of the app to take effect.
  • On Windows you can check in the soundmixer that the audio device you're capturing is the device that is actually playing audio. On Linux you can use pavucontrol to enable the audio monitor for the audio device you are capturing.
  • you can (and probably should) use the "RMS monitor" feature to verify that swyh-rs is actually capturing audio.
  • a built-in audio streaming web server is started on port 5901.
  • all media renderers are discoverded using SSDP on the local network, this takes about four seconds to complete. By default the network that connects to the internet is chosen (so that on a multihomed Windows machine the most likely interface is selected). If necessary you can choose another network from the network dropdown, for instance if you use a VPN.
  • then a button is shown for every renderer found
  • if you click the button for a renderer the OpenHome or AvTransport protocol is used to let the renderer play the captured audio from the webserver
  • audio is always sent in audio/l16 PCM format, no matter the input source, using the sample rate of the source, unless you enable 24 bit LPCM (see below).
  • some renderers will stop when detecting a pause between songs or for some other unknown reason. You can use the "Autoresume" checkbox if you encounter this problem. But always try to disable the "Chunked Transfer Encoding" first to see if this fixes the problem before you enable AutoResume. Since version 1.3.2 AutoResume should work with OpenHome renderers too (tested with Bubble UPNP Server and Chromecast/Nest Audio).
  • there is an "Autoreconnect" checkbox, if set all renderers still active when closing swyh-rs GUI will be automatically activated on program start
  • since 1.4.0 there is a dropdown that lets you choose between FLAC, LPCM or WAV format. Preferred format is FLAC, WAV or LPCM should only be used if FLAC does not work. Also, only FLAC will work with 24 bit.
  • there is (since 1.3.20) a check box "24 bit". It causes audio to be streamed in 24 bit LPCM format (audio/L24) with the sampling rate of the audio source. It only works reliably with the FLAC format. 24 bit works with Bubble/UPNP too with LPCM, but not with hardware streamers.
  • there is (since 1.3.13) an input box to select the HTTP listener port for the streaming server. Default is 5901. If you use a firewall, this port should allow incoming HTTP connections from your renderer(s).
  • there is (since 1.3.6) an option to enable visualization of the RMS value (L+R channel) of the captured PCM audio signal. It will only add an insignificant amount of CPU use.
  • you can also enter the webserver url in the renderer, for instance in Volumio as a web radio at http://{ip_address}:5901/stream/swyh.wav, so that you can start playing from the Volumio UI if swyh-rs is already running
  • the program tries to run at a priority "above normal" in the hope that using the computer for other stuff will not cause stuttering. On Windows this always works, on Linux you need the necessary priviliges (renice).
  • the SSDP discovery process is rerun every x minutes in the background, any newly discovered renderers will be automatically added to the GUI. Existing renderers that "disappear" during discovery are not deleted from the GUI, as SSDP discovery is not guaranteed to be failsafe (it uses UDP packets). The SSDP discovery interval is configurable, minimum value is 0.5 minutes, there is no maximum value.
  • after a configuration change that needs a program restart, you get a "restart" popup dialog. Click "Restart" to restart the app, or "Cancel" to ignore.
  • Since version 1.2.2, swyh-rs will peridically send silence to connected renderers if no sound is being captured because no audio is currently being played. This prevents some renderers from disconnecting because they have not received any sound for some time (Bubble UPNP Server with Chromecast/Nest Audio). Apparently sending silence keeps them happy. For FLAC streaming white noise at -90 db is sent because silence is compressed away in FLAC.
  • the Inject Silence checkbox will continuously mix silence into the input stream, as an alternative for the above. Do not enable this for FLAC, as it gets compressed away resulting in very large gaps between FLAC frames causing the connection being aborted by some streamers if no audio is being played.
  • Since version 1.5 you can have multiple instances running where each instance uses a different configuration file. An optional command line parameter -c config or --configuration config has been added to enable this (using a shortcut or starting swyh-rs from the command line). This config parameter is then used as part of the config.toml filename for the swyh-rs instance. The default config is empty. Examples: swyh-rs -c 1 or swyh-rs --configuration vb-audio. This way you can stream different audio sources to different receivers simultaneously.
  • Since 1.9.9 you have a dropdown to select one of 5 possible HTTP streaming sizes, select the one that works best for you with the selected streaming format:
    • NoneChunked: no Content-Length, chunked HTTP streaming
    • U32MaxChunked: Content-Length = u32::MAX, chunked HTTP streaming
    • U64MaxChunked: Content-Length = u64::MAX, chunked HTTP streaming
    • U32MaxNotChunked: Content-Length = u32::MAX -1, no chunking, default for WAV
    • U64MaxNotChunked: Content-Length = u64::MAX - 1, no chunking
  • Since 1.10.0, contributed by @ein-shved:
    • there are now build files for the Nix build system and the possibility to install swyh-rs-cli as a service using Nix
    • a more flexible CLI configuration with new -C (configfile) switch and automatic serve mode is no player specified
  • Since 1.10.5 you can enable initial buffering audio for a number of milliseconds before streaming starts, this may help to prevent stuttering on flaky (WiFi) networks or with streamers that don't have a configurable buffer size or that have a flaky system clock.

The CLI binary

Since 1.7.0, there is a new binary, swyh-rs-cli. It has no GUI, but otherwise shares all code with swyh-rs. The GUI configuration options have all been replaced with a corresponding command line option.

This is the "Usage message" (produced by the -h or --help option):

Recognized options:
    -h (--help) : print usage
    -n (--no-run) : dry-run mode that exits just before starting to stream
    -c (--config_id) string : config_id [_cli]
    -C (--configfile) string : alternative full pathname of configfile
    -p (--server_port) u16 : server_port [5901]
    -a (--auto_reconnect) bool : auto reconnect [true]
    -r (--auto_resume) bool : auto_resume [false]
    -s (--sound_source) u16 : sound_source index or name [os default]
    -l (--log_level) string : log_level (info/debug) [info]
    -i (--ssdp_interval) i32 : ssdp_interval_mins [10]
    -b (--bits) u16 : bits_per_sample (16/24) [16]
    -f (--format) string : streaming_format (lpcm/flac/wav) [LPCM] optionally followed by a plus sign and a streamsize[LPCM+U64maxNotChunked] 
    -o (--player_ip) string : the player ip address [last used player]
    -e (--ip_address) string : ip address of the network interface [last used]
    -x (--serve_only) bool : skip ssdp discovery and start serving immediately [false]
    -u (--upfront-buffer) i32: initial audio bufferign before streaming starts [0]

The default values for missing options are given between square brackets. Refer to the GUI description for an explanation of the options. Most options except -h, -n and -x are saved in the config file, so once a config is working to your liking you no longer have to provide them.

Options -h, -n and -x will ignore the optional boolean argument (true/false) if specified. Specifying the option alone is equivalent to true. Other boolean options accept an optional true/false, because they are remembered in the config file and you should be able to change the stored value.

Hint: use the -n (dry-run) mode to get the index of the sound source device and the ip address of the receiver that you need to pass as commandline parameter.

You can also specify a sounde source name instead of an index, or a unique substring of the name. If you have multiple identically named soundcards, you can append :n to the name, where n is a zero-based index in the duplicates.

Streaming is started automatically, and you can stop and restart streaming with the remote of your player as long as the app is running. The only way to stop the cli app is by killing it, with "CONTROL C" or task manager or any other way you use to kill processes. You can run as many instances simultaneously as you like as long as you start each one with its own configuration id value (-c option). I suppose you could run it from the command line or as a scheduled task or as an autorun task in Windows or... Since version 1.10.0 you can use Nix to build and install swyh-rs-cli as a service. The Nix files are contributed by @ein-shved. I don't use Nix myself.

When using the -x (--serve_only) option, no SSDP discovery is run, and playing is not started (ignoring the -o option). Instead swyh-rs-cli immediately starts listening for streaming requests from renderers until you terminate it. If you do not specify a player swyh-rs-cli switches to serve_only mode.

Latency and streaming format and stream duration

  • For minimal latency, use LPCM (if your receiver supports it). On many devices LPCM will only work with 16 bit samples.
  • A higher bit depth and/or sample rate will reduce latency because it will fill the buffer of the receiver faster.
  • For unlimited streamsize and duration, use NoneChunked. If it doesn't work try one of the other options.
  • WAV is in theory limited to 4 GB streaming, so it's possible that it only works with an u32Max streamsize. But you can try if NoneChunked works. 4 GB is only a couple of hours of streaming depending on sample size and sample rate. On MoodeAudio WAV only works with U32MaxNotChunked, but RF64 and FLAC work with anything. It depends on the decoder used in the receiver.
  • On some receivers WAV and RF64 will cause an extra HTTP request, increasing latency slightly.
  • If you suffer from hiccups or drop-outs caused by your WiFi network, use FLAC, as the compression increases buffering in the receiver. This makes it less likely that you will suffer from audio stuttering.

Audio quality and Windows WasApi Loopback capture

If you want maximum audio quality on Windows, there are a number of concerns:

  • you should avoid resampling, because it affects audio quality. The sampling rate from the original audio source should be used to preserve quality. This means that you should make sure that the sampling frequency in the entire audio chain is the same (Use "Control Panel Sound" to check/change the sampling frequency). Bit depth does not really affect sound quality, and 16 bit is enough except if you are recording for mastering purposes in an audio lab. Deezer HiFi and Tidal HiFi use 16 bit 44100 Hz (lossless CD quality).
  • on Windows, WasApi is used to capture audio. WasApi tries to capture directly from the hardware (soundcard) loopback if available, otherwise it uses the soundsource directly. In practice, this means that the soundcard loopback audio quality can be vastly inferior to the original soundsource (Realtek, Conexant, especially in laptops). Make sure all "effects" are disabled. The freeware/donationware VBAudio HiFi Cable driver (https://shop.vb-audio.com/en/win-apps/19-hifi-cable-asio-bridge.html?SubmitCurrency=1&id_currency=2) is an excellent solution to prevent this problem. Just make sure you configure it with the same sampling frequency as the default Windows audio source. You can then select HiFi Cable as the sound source in swyh-rs, and use the Windows Sound Mixer to route different apps to other sound drivers for Windows as needed (system sound etc). HiFi cable is a bit perfect pipe from the audio source to the renderer, except for the bit depth at this moment, because swyh-rs uses audio/l16, FLAC/16 or FLAC/24 to stream to the network players, but this does not affect sound quality, it only limits the dynamic range to 96 dB when using 16 bits which is fine for HiFi. You can also make HiFi cable the default output source, and configure other sound cards in the volume mixer for applications as needed.

Audio recording

Audio recording is not supported, as there are other and better free tools to do that, like Audacity.

The following pages might get you going:

See also issue #44.

Screenshot

afbeelding

swyh-rs's People

Contributors

dheijl avatar ein-shved avatar joshuamegnauth54 avatar moalyousef avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

swyh-rs's Issues

Audio streaming on Linux not working | Connection immediately terminated

Hi,

first of all thanks for your hard work. I can't get the audio casting on Linux (Manjaro 20.2.1) to work though.
The renderer is found on the network, but the connection is terminated immediately. No audio is played either.

I attach the log, maybe you can see where this is going wrong. If you need further information, let me know.

Cheers!

Log file:
log.txt

Doesn't work with BubbleUpnP

Hi,

I tried your software with a chromecast emulated as a Openhome renderer via BubbleUpnP server.
The problem is that the device is not listed as renderer...
Second problem: I am unable to choose the audio capture source, by default it uses always the Conexant HD device.
I would rally like to use your app which looks really promising!

Thanks for your help

Streams garbled audio from Logitech PRO X Wireless Headset source

I'm running into an issue streaming when the Audio Source is my Logitech Pro X wireless headset. The audio coming through on my external speakers is garbled noise. Changing the audio source makes streaming work just fine.

The log isn't showing anything unusual, but let me know if there's anything else I can provide:

Configuration { server_port: Some(5901), auto_resume: false, sound_source: "Speakers (Logitech PRO X Wireless Gaming Headset)", log_level: Debug, ssdp_interval_mins: 1.0, auto_reconnect: false, disable_chunked: false, use_wave_format: true, bits_per_sample: Some(16), monitor_rms: false, last_renderer: "Sonos Beam Office Beam - Sonos Beam Media Renderer", last_network: "192.168.1.5", config_dir: "C:\\Users\\Corvid\\.swyh-rs" }
Setup audio sources
Now running at ABOVE_NORMAL_PRIORITY_CLASS
Capturing audio from: Speakers (Logitech PRO X Wireless Gaming Headset)
Default audio SupportedStreamConfig { channels: 8, sample_rate: SampleRate(48000), buffer_size: Unknown, sample_format: F32 }
Discover networks
Starting SSDP discovery
The streaming server is listening on http://192.168.1.5:5901/stream/swyh.wav
Sample rate: 48000, sample format: audio/L16 (PCM)
AV Stop playing on Bedroom Move - Sonos Move Media Renderer host=192.168.1.234 port=1400
AV Start playing on Bedroom Move - Sonos Move Media Renderer host=192.168.1.234 port=1400 from 192.168.1.5 using AvTransport Play
Received request /stream/swyh.wav from 192.168.1.234:48546
Streaming audio/wave;codec=1 (WAV), input sample format F32, channels=2, rate=48000, disable chunked=false to 192.168.1.234:48546
AV Stop playing on Bedroom Move - Sonos Move Media Renderer host=192.168.1.234 port=1400
Streaming to 192.168.1.234:48546 has ended
AV Stop playing on Office Beam - Sonos Beam Media Renderer host=192.168.1.243 port=1400
AV Start playing on Office Beam - Sonos Beam Media Renderer host=192.168.1.243 port=1400 from 192.168.1.5 using AvTransport Play
Received request /stream/swyh.wav from 192.168.1.243:58272
Streaming audio/wave;codec=1 (WAV), input sample format F32, channels=2, rate=48000, disable chunked=false to 192.168.1.243:58272
The wave_reader is now receiving samples

As an additional data point, I am able to stream from the Logitech Pro X audio source using the original Stream What You Hear with no issues.

Hide GUI

Thank you for making swyh-rs!
I use it to send application audio to Chromecast devices like so:

App -> VB-Audio HiFi Cable -> swyh-rs -> BubbleUPNP -> Chromecast

In this scenario, ideally the chain is "always on" and I just fire up any given application, start the audio, and it should start playing on my speakers. That kind of works already, however I can find no way to autostart swyh-rs in the background. Is there a way to send it to tray, or hide the GUI altogether, or run it in daemon/system service mode? Basically, what I am asking is to be able to use swyh-rs without having to have the program window running. Maybe a --tray switch could be implemented that will run it GUI-less with a simple tray icon to close it, or something along those lines.

Incompatibility with Moode Audio Player

Hello, thank you for this awesome software! Unfortunately, it doesnโ€™t work with Moode audio player which is a fork of Volumio. Any idea why? Iโ€™m using the current release of Moode, 7.6.1

Sound delay

Hi again,
I don't know if it is really an issue, but I would like to know if it is possible to reduce the delay between the audio played on computer and the sound played bythe renderer (for me a chromecast)?
I have 1.5s which is not bad I think, compared to other app like LAB, Chromecaster GUI... but if it could be improved it would be really great!
Thanks

Sonos test

Tried using program with sonos, get "the song is not encoded correctly"
so assuming it wont work with sonos speakers.

Swyh-rs.apk ?

I would have liked to know, if it was possible to create an Android compatible version, I know a good number of users who have been looking for this kind of tools for a long time but under Android ...
When will Swyh-rs.apk ?

Autoreconnect doesn't work anymore

Hi,

I use your app since the beginning and when you added the autoreconnect feature it worked.
But until version 1.1.1 it doesn't work, when I check the box, close the app and open it again, the box is unchecked...

LAN Radio

Hi Dheijl,
Would it be possible to add an option to broadcast the sound in a sort of web-radio easily accessible from an internet browser or vlc ?
Actually if I try access http:// "my ip" /stream/swyh.wav with "Opera web browser" or "VLC" the streaming is impossible...
That would be a really interesting option.
Thank you.

Error capturing f32 audio stream on Windows

Hi,

I would like to use your software to stream music to a Volumio server, but when I do so I have no sound. The log shows an error about capturing the audio, this happens on two machines I tested it on. I also tested with the VBAudio HiFi Cable but I get the same error. I hope you can fix this!

log.txt

Custom folder location

I would suggest to implement a way to change the directory for the config and log files from the default home directory. Personally I don't like my home directory to be cluttered, thus I changed the folder location in code. However, that's not really a user friendly solution. An alternative would be to maybe simply make the folder hidden?

Possible to run this as command line to play specific audio file?

I just got a Sonos play one and i realized its almost impossible to redirect this as windows 10 speaker.
While I need to setup blueiris motion trigger to play alarm through speaker,
Fortunately it's also possible for Blueiris to trigger executable file when motion is triggered,

So is it possible call with a command line, to run audio file played by sonos with this?

Automatic setup

Actually, automatic download of latest release is part of my complete setup script.
Feel free to add it to the wiki if you want.
It works on Windows 7 and probably on Windows 10 as well.

Requirements:
Cygwin
7-Zip
nircmd
Python
PuTTY
KeePass
KeeAgent

In addition, you need to have a backup folder at a location convenient for you.
This folder should include (e.g.):

D:\Backup\swyh-rs\.swyh-rs\config.ini
D:\Backup\swyh-rs\nogui.py
D:\Backup\swyh-rs\swyh-rs.bat

1. The following script downloads the latest version from GitHub, unzips it to the desired location, creates a shortcut in the Start Menu, copies the configuration file and additional files (nogui.py and swyh-rs.bat)

@echo off
set TOOLSDIR=C:\tools
set BACKUPDIR=D:\Backup

FOR /F "tokens=*" %%G IN ('curl -s https://api.github.com/repos/dheijl/swyh-rs/releases/latest ^| grep -oP '^"tag_name^": ^"\K^(.*^)^(^?^=^"^)'') DO set VERSION=%%G
curl -L https://github.com/dheijl/swyh-rs/releases/latest/download/swyh-rs-%VERSION%.zip -o %TEMP%\swyh-rs-%VERSION%.zip
7z x %TEMP%\swyh-rs-%VERSION%.zip -o%TOOLSDIR%\swyh-rs -x!swyh-rs-deb.exe
md "%APPDATA%\Microsoft\Windows\Start Menu\Programs\swyh-rs"
nircmd shortcut "%TOOLSDIR%\swyh-rs\swyh-rs.exe" "%APPDATA%\Microsoft\Windows\Start Menu\Programs\swyh-rs" "swyh-rs"
robocopy %BACKUPDIR%\swyh-rs\.swyh-rs %USERPROFILE%\.swyh-rs /MIR
copy %BACKUPDIR%\swyh-rs\nogui.py %TOOLSDIR%\swyh-rs /y
copy %BACKUPDIR%\swyh-rs\swyh-rs.bat %TOOLSDIR%\swyh-rs /y

2. nogui.py is a script by @Silun - wiki

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'C:\tools\swyh-rs\swyh-rs.exe'

startProgram(program)

3. swyh-rs.bat is a simple script that allows you to toggle application state (start/stop). Additionally it checks if KeePass with KeeAgent plugin is running (it serves SSH keys). It sets the selected sound device, volume to 100% and toggle mute mode. Finally, it remotely starts or stops playing the stream on your music player. The script can be run manually or by using a shortcut created with AutoHotkey

@echo off
tasklist | find /i "KeePass.exe" > nul || start "" "C:\Program Files (x86)\KeePass Password Safe 2\KeePass.exe" && pause

tasklist | find /i "swyh-rs.exe" > nul
IF %ERRORLEVEL% == 1 goto Start
IF %ERRORLEVEL% == 0 goto Stop

:Start
python C:\tools\swyh-rs\nogui.py
nircmd setdefaultsounddevice "Speakers" 1
nircmd setsysvolume 65535
nircmd mutesysvolume 1
plink -batch -ssh [email protected].*.* -P 22 [your_command_to_start http://192.168.*.*:5901/stream/swyh.wav]
exit

:Stop
plink -batch -ssh [email protected].*.* -P 22 [your_command_to_stop http://192.168.*.*:5901/stream/swyh.wav]
nircmd mutesysvolume 0
nircmd killprocess swyh-rs.exe

My scripts above are not very sophisticated. But they work :)
Maybe someone will find it helpful.

Cannot stream audio from applications using wasapi

My current set up is Kodi playing audio with wasapi and hifi cable and having that audio streamed via airplay using a similar software to yours called tuneblade. Unfortunately, airplay is limited to only 41.1khz sample rate and all movies need to be downsampled.

I've gotten your software to function in a similar manner, but only if Kodi is using direct sound and not wasapi. There seems to be a noticeable decrease is quality using direct sound with my stereo set up. The timing for audio/video seems to always be a few milliseconds off and is not a consistent amount delayed every time a video is launched. Is there a way for swyh-rs to be able to stream audio from applications using wasapi? Thanks again for your time and this software!

Some small ways to improve the code

Thanks for helping me with the cpal wasapi loopback capture :)

I took a look at the code of swyh and noticed some small things:

  1. Calling get_output_audio_devices() twice unnecessarily:
    let audio_devices = get_output_audio_devices().unwrap();

    let devices = get_output_audio_devices().unwrap();

cpal::Device isn't Clone but you could reuse the result if you move

swyh-rs/src/main.rs

Lines 305 to 307 in d51bed2

for dev in devices.iter() {
choose_audio_source_but.add_choice(&dev.name().unwrap().fw_slash_pipe_escape());
}

to before

swyh-rs/src/main.rs

Lines 281 to 287 in d51bed2

for adev in audio_devices {
let devname = adev.name().unwrap();
if devname == config.sound_source {
audio_output_device = adev;
info!("Selected audio source: {}", devname);
}
}

  1. You could eliminate unsafe here by using once_cell:
    static ONETIME_SW: OnceCell<()> = OnceCell::new();
    ONETIME_SW.get_or_init(|| {
        log("The wave_reader is receiving samples".to_string());
    })

(Btw, you could remove the dependency on lazy_static completely in favor of using once_cell.)

  1. You could do let chunk = samples.to_vec(); here:

    let mut chunk: Vec<i16> = Vec::new();
    chunk.resize(samples.len(), 0);
    chunk.copy_from_slice(samples);

  2. You could do self.fifo.extend(chunk); here:

    let mut new_samples: VecDeque<i16> = VecDeque::from(chunk);
    self.fifo.append(&mut new_samples);
    continue;

    (Also you can remove continue;.)
    Btw, I haven't looked at your whole code, but why are you using VecDeque instead of Vec?
    It's usually slower due to cache-nonlocality. Vec::push is asymptotically O(1) (constant time) and has better cache locality & less overhead when iterating. Usually Vec is used for audio buffers.

  3. You could theoretically use chunks_exact_mut here:

    while i < buf.len() - 2 {

  4. You could reuse this Vec between frames, to reduce allocations:

    let i16_samples: Vec<i16> = samples.iter().map(|x| x.to_i16()).collect();

  5. You could use RwLock<HashMap<..>> for CLIENTS instead of Mutex<HashMap<..>>, to allow multiple readers at the same time:
    Either std: https://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html
    Or parking_lot: https://docs.rs/parking_lot/0.11.0/parking_lot/type.RwLock.html#differences-from-the-standard-library-rwlock
    Or you could use a concurrent hashmap, but I'm not sure what's best here since I haven't read the whole code..
    Note that RwLock is not always better, at least std's RwLock on linux.

  6. You can eliminate all the unsafe blocks around access to CONFIG_CHANGED like this one or this one

    swyh-rs/src/main.rs

    Lines 224 to 226 in d51bed2

    unsafe {
    CONFIG_CHANGED = true;
    }

    by using Rc<Cell<bool>> (or AtomicBool but the closures passed to handle2 don't need to be Send).

Linn streaming client & 24bit

Hi
I just discovered your software and it seems the solution for all I was looking for.
I tried it on a Windows 10 mini computer, using the virtual cable you mention. My streaming client from scottish HighEnd manufacturer Linn is recognized, but I cannot establish a stable connection. The stream stops and starts permanently. Swyh-rs is displayed on its playlist, though.
How can I figure out, why it does not work or what Iโ€™m doing wrong?

Might I add a suggestion, as well? Please add 24bit bit depth. In terms of sound quality imho this is a huge step. Yes, I read your remarks and I humbly would put it that way: I would not want to loose those additional 8 bits in my HiFi-system. They make all the difference in musicality and micro dynamics to me.

My plan is to โ€œdigitizeโ€ my analog gear (reel to reel & record player) using my studio quality ASIO soundcard in 192kHz / 24 bit mode and send it to streaming client using swyh-rs. That way, I could also use its high quality room correction.
I hope, that the whole process can be run as a service, so I can really run the mini-computer headlesy and automatically start your software in the proper configuration for this very streaming task.

So: thanks for having developed this, thanks for trying to help me get the streaming problem analyzed/solved and thanks for hopefully considering the 24 bit suggestion.

Regards

V0.9.7

Hi dheijl,
I install and try your new release.. And when I changed LOG level or Input Source, I can't see a Restart Button.

Another thing, I do not see the usefulness of the SSDP discovery at regular and adjustable interval, I think that in a classic use, it would be more useful to just put a button to restart the SSDP discovery. When I use swyh-rs on a renderer that is already active and that I turn on my tv for example, it is easier for me to manually search for my tv rather than wait for automatic discovery.. Anyway it works well, but if I start swyh-rs, ssdp discovery find my Harmann I start th stream, then after a moment I start my TV, the GUI give me :
Capture dโ€™รฉcran (8)
Sorry but always GUI bug.. But nothung serious..

Have a nice day..

Loop stream loss

Hi @dheijl I have installed the latest version 1.0.4 ..
This several times that I find this problem of loss of the stream, at the beginning you had thought that my amplifier cut the transmission as soon as a silence was detected and suddenly you had coded us the autoresume play, it works well in general but sometimes without my understanding why the stream is systematically interrupted, without there being any silence since I am reading music, the autoresume works and suddenly I find myself with a stream systematically interrupted then restart. .. Endlessly...
I wonder why my amp decides to stop the stream?
Why this problem only occurs from time to time ... for info I had run swyh-rs without my amp being turned on so I started without any visible renderer then I turned on my amp, swyh-rs detected my amp, I started the stream with the autoresume checked (as usual) and this problem occurred ... I restart swyh-rs but same problem many times, I stop swyh-rs, I start LAB, I start the stream and there is no problem, stream continuously ... I stop LAB and restart swyh-rs and there magic no more cutting the stream ... I don't understand anything. .. But there is something ...

Feature requested

As this app works so well, I would like to know if it would be possible to add a feature to reconnect automaticaly to the last renderer choosen?
With this feature I couldlaunch the app when windows starts and use it like a sound card!

Can you add input source ?

Hi again,

Would it be possible to add an option to choose the audio input source?

My problem I want to keep my native sound card as default audio source and use VB-Audio Hifi only for my web browser and my deezer app.
With the sound settings of windows 10 you can choose the audio input and output source by application but it does not work with swyh-rs, so if it is not too complicated to add the option to select Input source that would be a good option
I would point out that with LocalAudioBroadcast which also has no option to select the audio input source, I was able to change the audio input source via the sound settings of windows and therefore completely separate the sounds on my pc and what I send in streaming ..
A new field of research..

No sound with 1.3.20 and 1.3.21

Hi @dheijl
Today after some time without upgrading I try to go under 1.3.21 but despite my amp being well seen and the stream to the amp starts but no sound coming out of the amp.. I I had already tried 1.3.20 with the same result...
release 1.3.19 works correctly.. I came back to this one..
is there a need to completely remove swyh-rs before installing the new 1.3.21?
here is log.txt from 1.3.21 (no sound) => https://paste.yunohost.org/ewunonoqec.php
here is log.txt from 1.3.19 (sound ok) => https://paste.yunohost.org/iribezevon.php

doesn't stream against Volumio

Following from the conversation in SWYH: StreamWhatYouHear/SWYH#35

Running the debug exe v0.3

STEPS:

  1. start the program
  2. it detects Volumio (and doesn't hang as before)
  3. click on what looks like might be a button, named "Volumio"

EXPECT

SWYH to show up in Volumio under media servers. I should be able to click on that and press play and be able to hear all audio from my computer.

(I assume that is the flow, though I've never experienced it and can't be positive that is what is really supposed to happen)

ACTUAL RESULTS

Nothing happens in Volumio (which is unlike straight SWYH which at least shows up in Volumio's media servers window, even if Volumio can't ultimately connect to it). Nothing happens anywhere else either. Just output:

Output in the app logging window:

SSDP discovery started
Renderer at : http://192.168.1.53:49152/description.xml
Getting renderer descriptions
Renderer Volumio Volumio http://192.168.1.53:49152/ has 9 services
SSDP discovery complete
Default audio output device: Speakers / Headphones (2- Realtek Audio)
Default config SupportedStreamConfig { channels: 2, sample_rate: SampleRate(48000), buffer_size: Unknown, sample_format: F32 }
Serving on 192.168.1.50:5901
Start playing on Volumio host=192.168.1.53 port=49152 from 192.168.1.50
Received request /stream/swyh.wav from 192.168.1.53:38544

and eventually:

The wave_reader is receiving samples

Output in the console window:

SSDP discovery started
UDP response at 1:
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=3600
DATE: Wed, 30 Sep 2020 13:04:10 GMT
EXT:
LOCATION: http://192.168.1.53:49152/description.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 39b4a8b6-0278-11eb-a535-936c2f8a36b1
SERVER: Linux/4.19.86-v7+, UPnP/1.0, Portable SDK for UPnP devices/1.6.20.jfd5
X-User-Agent: redsonic
ST: urn:schemas-upnp-org:service:RenderingControl:1
USN: uuid:04255cb4-11f0-58db-0053-0017f700aae4::urn:schemas-upnp-org:service:RenderingControl:1


Renderer at : http://192.168.1.53:49152/description.xml
Getting renderer descriptions
Get service description for http://192.168.1.53:49152/description.xml
Service description:
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<friendlyName>Volumio</friendlyName>
<manufacturer>Volumio</manufacturer>
<manufacturerURL>https://volumio.org</manufacturerURL>
<modelDescription>The Audiophile Music Player</modelDescription>
<modelName>Volumio</modelName>
<modelNumber>1.0</modelNumber>
<modelURL>https://volumio.org</modelURL>
<serialNumber>42</serialNumber>
<UDN>uuid:04255cb4-11f0-58db-0053-0017f700aae4</UDN>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>64</width>
<height>64</height>
<depth>32</depth>
<url>/upmpd/icon.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<SCPDURL>/upmpd/RenderingControl.xml</SCPDURL>
<controlURL>/ctl/RenderingControl</controlURL>
<eventSubURL>/evt/RenderingControl</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<SCPDURL>/upmpd/AVTransport.xml</SCPDURL>
<controlURL>/ctl/AVTransport</controlURL>
<eventSubURL>/evt/AVTransport</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<SCPDURL>/upmpd/ConnectionManager.xml</SCPDURL>
<controlURL>/ctl/ConnectionManager</controlURL>
<eventSubURL>/evt/ConnectionManager</eventSubURL>
</service>
<service>
<serviceType>urn:av-openhome-org:service:Product:1</serviceType>
<serviceId>urn:av-openhome-org:serviceId:Product</serviceId>
<SCPDURL>/upmpd/OHProduct.xml</SCPDURL>
<controlURL>/ctl/OHProduct</controlURL>
<eventSubURL>/evt/OHProduct</eventSubURL>
</service>
<service>
<serviceType>urn:av-openhome-org:service:Info:1</serviceType>
<serviceId>urn:av-openhome-org:serviceId:Info</serviceId>
<SCPDURL>/upmpd/OHInfo.xml</SCPDURL>
<controlURL>/ctl/OHInfo</controlURL>
<eventSubURL>/evt/OHInfo</eventSubURL>
</service>
<service>
<serviceType>urn:av-openhome-org:service:Time:1</serviceType>
<serviceId>urn:av-openhome-org:serviceId:Time</serviceId>
<SCPDURL>/upmpd/OHTime.xml</SCPDURL>
<controlURL>/ctl/OHTime</controlURL>
<eventSubURL>/evt/OHTime</eventSubURL>
</service>
<service>
<serviceType>urn:av-openhome-org:service:Volume:1</serviceType>
<serviceId>urn:av-openhome-org:serviceId:Volume</serviceId>
<SCPDURL>/upmpd/OHVolume.xml</SCPDURL>
<controlURL>/ctl/OHVolume</controlURL>
<eventSubURL>/evt/OHVolume</eventSubURL>
</service>
<service>
<serviceType>urn:av-openhome-org:service:Playlist:1</serviceType>
<serviceId>urn:av-openhome-org:serviceId:Playlist</serviceId>
<SCPDURL>/upmpd/OHPlaylist.xml</SCPDURL>
<controlURL>/ctl/OHPlaylist</controlURL>
<eventSubURL>/evt/OHPlaylist</eventSubURL>
</service>
<service>
<serviceType>urn:av-openhome-org:service:Radio:1</serviceType>
<serviceId>urn:av-openhome-org:serviceId:Radio</serviceId>
<SCPDURL>/upmpd/OHRadio.xml</SCPDURL>
<controlURL>/ctl/OHRadio</controlURL>
<eventSubURL>/evt/OHRadio</eventSubURL>
</service>
</serviceList>
<presentationURL>/upmpd/presentation.html</presentationURL>
</device>
<devicelist></devicelist>
<URLBase>http://192.168.1.53:49152/</URLBase>
</root>

Renderer Volumio Volumio http://192.168.1.53:49152/ has 9 services
.. urn:schemas-upnp-org:service:RenderingControl:1 urn:upnp-org:serviceId:RenderingControl /ctl/RenderingControl
.. urn:schemas-upnp-org:service:AVTransport:1 urn:upnp-org:serviceId:AVTransport /ctl/AVTransport
.. urn:schemas-upnp-org:service:ConnectionManager:1 urn:upnp-org:serviceId:ConnectionManager /ctl/ConnectionManager
.. urn:av-openhome-org:service:Product:1 urn:av-openhome-org:serviceId:Product /ctl/OHProduct
.. urn:av-openhome-org:service:Info:1 urn:av-openhome-org:serviceId:Info /ctl/OHInfo
.. urn:av-openhome-org:service:Time:1 urn:av-openhome-org:serviceId:Time /ctl/OHTime
.. urn:av-openhome-org:service:Volume:1 urn:av-openhome-org:serviceId:Volume /ctl/OHVolume
.. urn:av-openhome-org:service:Playlist:1 urn:av-openhome-org:serviceId:Playlist /ctl/OHPlaylist
.. urn:av-openhome-org:service:Radio:1 urn:av-openhome-org:serviceId:Radio /ctl/OHRadio
SSDP discovery complete
Default audio output device: Speakers / Headphones (2- Realtek Audio)
Default config SupportedStreamConfig { channels: 2, sample_rate: SampleRate(48000), buffer_size: Unknown, sample_format: F32 }
Serving on 192.168.1.50:5901
Pushed renderer #0 Volumio Volumio, state = ON
Start playing on Volumio host=192.168.1.53 port=49152 from 192.168.1.50
OHPlaylist server URL: http://192.168.1.50:5901/stream/swyh.wav
url: http://192.168.1.53:49152/ctl/OHPlaylist, SOAP Action: urn:av-openhome-org:service:Playlist:1#DeleteAll, SOAP xml body
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:DeleteAll xmlns:u="urn:av-openhome-org:service:Playlist:1"/></s:Body></s:Envelope>
resp: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:DeleteAllResponse xmlns:u="urn:av-openhome-org:service:Playlist:1"></u:DeleteAllResponse>
</s:Body> </s:Envelope>
url: http://192.168.1.53:49152/ctl/OHPlaylist, SOAP Action: urn:av-openhome-org:service:Playlist:1#Insert, SOAP xml body
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Insert xmlns:u="urn:av-openhome-org:service:Playlist:1"><AfterId>0</AfterId><Uri>http://192.168.1.50:5901/stream/swyh.wav</Uri><Metadata>&lt;DIDL-Lite&gt;&lt;item&gt;&lt;DIDL-Lite xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot;&gt;&lt;item id=&quot;1&quot; parentID=&quot;0&quot; restricted=&quot;0&quot;&gt;&lt;dc:title&gt;swyh-rs&lt;/dc:title&gt;&lt;res bitsPerSample=&quot;16&quot; nrAudioChannels=&quot;2&quot; protocolInfo=&quot;http-get:*:audio/wav:*&quot; sampleFrequency=&quot;44100&quot;&gt;http://192.168.1.50:5901/stream/swyh.wav&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</Metadata></u:Insert></s:Body></s:Envelope>
resp: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:InsertResponse xmlns:u="urn:av-openhome-org:service:Playlist:1">
<NewId>10</NewId>
</u:InsertResponse>
</s:Body> </s:Envelope>
SeekId: 10
url: http://192.168.1.53:49152/ctl/OHPlaylist, SOAP Action: urn:av-openhome-org:service:Playlist:1#SeekId, SOAP xml body
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SeekId xmlns:u="urn:av-openhome-org:service:Playlist:1"><Value>10</Value></u:SeekId></s:Body></s:Envelope>
resp: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:SeekIdResponse xmlns:u="urn:av-openhome-org:service:Playlist:1"></u:SeekIdResponse>
</s:Body> </s:Envelope>
url: http://192.168.1.53:49152/ctl/OHPlaylist, SOAP Action: urn:av-openhome-org:service:Playlist:1#Play, SOAP xml body
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Play xmlns:u="urn:av-openhome-org:service:Playlist:1"/></s:Body></s:Envelope>
Received request /stream/swyh.wav from 192.168.1.53:38544
resp: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:PlayResponse xmlns:u="urn:av-openhome-org:service:Playlist:1"></u:PlayResponse>
</s:Body> </s:Envelope>

Audiocast M5 from iEast immediatly closed

Im currently trying to get the device working. It shows up on Windows network:
image

And it gets detected by swyh-rs:
image

However, it disconnects after some seconds after enabling the device, and i dont hear anything:

AV Start playing on AudioCast_CC29 host=192.168.0.58 port=49152 from 192.168.0.208 using AvTransport Play
Received request /stream/swyh.wav from 192.168.0.58:60814
Received request /stream/swyh.wav from 192.168.0.58:60816
The wave_reader is now receiving samples
Received request /stream/swyh.wav from 192.168.0.58:60818
Received request /stream/swyh.wav from 192.168.0.58:60820
=>Http connection with 192.168.0.58:60820 terminated [An existing connection was forcibly closed by the remote host. (os error 10054)]
Streaming to 192.168.0.58:60820 has ended
Received request /stream/swyh.wav from 192.168.0.58:60821
=>Http connection with 192.168.0.58:60818 terminated [An existing connection was forcibly closed by the remote host. (os error 10054)]
Streaming to 192.168.0.58:60818 has ended

32bit release?

Hi.

Is it posible to add x86 release version?

I tried replace swyh to swyh-rs, but the atom device is using licensed 32bit windows that i would like to keep.

Sonos Play:1 doesn't play

Thanks for your work, @dheijl!

However I have trouble to get to work with a Sonos PLay:1.
Looking in the Sonos S2 app this notification will always pop up when trying to play something.
"Use WMA/WAV" is checked.

grafik

v1.13.20 swyh-rs.zip has trojan virus

On Windows, when trying to unzip, Windows Defender detected:

Detected: Trojan:Script/Oneeva.A!ml
Status: Removed
A thread or app was removed from this device.

Is this real or false alarm?
Triedthe v1.13.19 zip and it was ok.

The stream stops after each song when I use VB Cable Hifi ?

Hi @dheijl and all,
I try to use VB-Audio cable Hifi to no longer have the sound coming out simultaneously (well almost ..!) On my pc and in my amplifier via the stream ..
In short when I use VB-Audio it works very well but just the time of a song, then I have a message

log: Received request /stream/swyh.wav from 192.168.1.26:50016
log: =>Http connection with 192.168.1.26:50016 terminated [Une connexion รฉtablie a รฉtรฉ abandonnรฉe par un logiciel de votre ordinateur hรดte. (os error 10053)]
log: Streaming to 192.168.1.26:50016 has ended

And I am therefore forced to restart the stream to my amp.

Pushed renderer #0 None Harman Kardon AVR265, state = ON
log: AV Stop playing on Harman Kardon AVR265 host=192.168.1.26 port=80
url: http://192.168.1.26:80/AVTransport/control,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Stop,
=>SOAP xml:

0

<=SOAP response:
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:StopResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"></u:StopResponse></s:Body></s:Envelope>

log: AV Start playing on Harman Kardon AVR265 host=192.168.1.26 port=80 from 192.168.1.27 using AvTransport Play
AvTransport server URL: http://192.168.1.27:5901/stream/swyh.wav
url: http://192.168.1.26:80/AVTransport/control,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI,
=>SOAP xml:

0http://192.168.1.27:5901/stream/swyh.wav<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/"><item id="1" parentID="0" restricted="0"><dc:title>swyh-rs</dc:title><res bitsPerSample="16" nrAudioChannels="2" protocolInfo="http-get:*:audio/l16;rate=48000;channels=2:DLNA.ORG_PN=LPCM" sampleFrequency="48000">http://192.168.1.27:5901/stream/swyh.wav</res><upnp:class>object.item.audioItem.musicTrack</upnp:class></item></DIDL-Lite>

<=SOAP response:
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURIResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"></u:SetAVTransportURIResponse></s:Body></s:Envelope>

url: http://192.168.1.26:80/AVTransport/control,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Play,
=>SOAP xml:

01

<=SOAP response:
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:PlayResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"></u:PlayResponse></s:Body></s:Envelope>

log: Received request /stream/swyh.wav from 192.168.1.26:50017
log: Streaming to 192.168.1.26:50017 has ended
log: Received request /stream/swyh.wav from 192.168.1.26:50018
log: =>Http connection with 192.168.1.26:50018 terminated [Une connexion รฉtablie a รฉtรฉ abandonnรฉe par un logiciel de votre ordinateur hรดte. (os error 10053)]
log: Streaming to 192.168.1.26:50018 has ended

By cons no problem when I use my real sound card ..?

Stream from Linux/Windows to AudioCast M5

Hi, I came across your program while looking to stream music from a Linux or Windows computer to the AudioCast M5.

I've downloaded the windows version, I have no idea how to point it to the AudioCast M5 (I know its IP address on my network) to send the audio to it. Can you explain it to me?

V0.9.0 deb

C:\Users\Asus-AC2N> cd desktop\swyh-rs

C:\Users\Asus-AC2N\Desktop\SWYH-RS>swyh-rs-deb
thread 'main' panicked at 'called Result::unwrap() on an Err value: Os { code: 3, kind: NotFound, message: "Le chemin dโ€™accรจs spรฉcifiรฉ est introuvable." }', src\main.rs:144:77
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

C:\Users\Asus-AC2N\Desktop\SWYH-RS>

Phorus sound bar detected but doesn't play audio

Hi! This looks like a great utility allowing me to wirelessly use my soundbar as my laptop's sound output. Very cool.

Unfortunately it doesn't seem to work. Sound still keeps coming from my laptop's speakers instead of the soundbar. I have compiled from source and am running on Fedora 35. I see a message in the logs saying "Sorry, you don't have permissions to raise priority....". Any idea what could be going on?

I'm assuming it is not due to incompatibility, because a similar project did work, albeit with quite some latency. I have also disabled SELinux. The soundbar ("Woonkamer") is correctly detected.

Schermafdruk van 2022-02-13 16-16-29

Debug logs:

swyh-rs on ๎‚  master [?] is ๐Ÿ“ฆ v1.3.22-beta via ๐Ÿฆ€ v1.58.1
โœฆ โฏ target/release/swyh-rs
15:22:30 [INFO] swyh-rs V 1.3.22-beta - Logging started.
15:22:30 [INFO] Config: Configuration { server_port: Some(5901), auto_resume: true, sound_source: "default", log_level: Debug, ssdp_interval_mins: 1.0, auto_reconnect: true, disable_chunked: false, use_wave_format: false, bits_per_sample: Some(24), monitor_rms: false, last_renderer: "Phorus-Renderer Woonkamer", last_network: "192.168.178.17", config_dir: "/home/anieuwland/.swyh-rs" }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Supported hosts:
  [Alsa]
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Available hosts:
  [Alsa]
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: ALSA
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   Default Output Device:
    Some("default")
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   Devices: 
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   1. "pipewire"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.1. SupportedStreamConfigRange { channels: 1, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.2. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.3. SupportedStreamConfigRange { channels: 3, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.4. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.5. SupportedStreamConfigRange { channels: 5, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.6. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.7. SupportedStreamConfigRange { channels: 7, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.8. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.9. SupportedStreamConfigRange { channels: 9, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.10. SupportedStreamConfigRange { channels: 10, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.11. SupportedStreamConfigRange { channels: 11, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.12. SupportedStreamConfigRange { channels: 12, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.13. SupportedStreamConfigRange { channels: 13, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.14. SupportedStreamConfigRange { channels: 14, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.15. SupportedStreamConfigRange { channels: 15, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.16. SupportedStreamConfigRange { channels: 16, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.17. SupportedStreamConfigRange { channels: 17, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.18. SupportedStreamConfigRange { channels: 18, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.19. SupportedStreamConfigRange { channels: 19, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.20. SupportedStreamConfigRange { channels: 20, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.21. SupportedStreamConfigRange { channels: 21, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.22. SupportedStreamConfigRange { channels: 22, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.23. SupportedStreamConfigRange { channels: 23, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.24. SupportedStreamConfigRange { channels: 24, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.25. SupportedStreamConfigRange { channels: 25, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.26. SupportedStreamConfigRange { channels: 26, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.27. SupportedStreamConfigRange { channels: 27, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.28. SupportedStreamConfigRange { channels: 28, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.29. SupportedStreamConfigRange { channels: 29, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.30. SupportedStreamConfigRange { channels: 30, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.31. SupportedStreamConfigRange { channels: 31, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.32. SupportedStreamConfigRange { channels: 32, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.33. SupportedStreamConfigRange { channels: 1, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.34. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.35. SupportedStreamConfigRange { channels: 3, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.36. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.37. SupportedStreamConfigRange { channels: 5, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.38. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.39. SupportedStreamConfigRange { channels: 7, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.40. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.41. SupportedStreamConfigRange { channels: 9, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.42. SupportedStreamConfigRange { channels: 10, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.43. SupportedStreamConfigRange { channels: 11, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.44. SupportedStreamConfigRange { channels: 12, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.45. SupportedStreamConfigRange { channels: 13, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.46. SupportedStreamConfigRange { channels: 14, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.47. SupportedStreamConfigRange { channels: 15, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.48. SupportedStreamConfigRange { channels: 16, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.49. SupportedStreamConfigRange { channels: 17, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.50. SupportedStreamConfigRange { channels: 18, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.51. SupportedStreamConfigRange { channels: 19, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.52. SupportedStreamConfigRange { channels: 20, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.53. SupportedStreamConfigRange { channels: 21, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.54. SupportedStreamConfigRange { channels: 22, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.55. SupportedStreamConfigRange { channels: 23, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.56. SupportedStreamConfigRange { channels: 24, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.57. SupportedStreamConfigRange { channels: 25, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.58. SupportedStreamConfigRange { channels: 26, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.59. SupportedStreamConfigRange { channels: 27, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.60. SupportedStreamConfigRange { channels: 28, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.61. SupportedStreamConfigRange { channels: 29, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.62. SupportedStreamConfigRange { channels: 30, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.63. SupportedStreamConfigRange { channels: 31, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.64. SupportedStreamConfigRange { channels: 32, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
swyh-rs on ๎‚  master [?] is ๐Ÿ“ฆ v1.3.22-beta via ๐Ÿฆ€ v1.58.1
โœฆ โฏ 15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   2. "default"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.1. SupportedStreamConfigRange { channels: 1, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.2. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.3. SupportedStreamConfigRange { channels: 3, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.4. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.5. SupportedStreamConfigRange { channels: 5, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.6. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.7. SupportedStreamConfigRange { channels: 7, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.8. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.9. SupportedStreamConfigRange { channels: 9, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.10. SupportedStreamConfigRange { channels: 10, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.11. SupportedStreamConfigRange { channels: 11, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.12. SupportedStreamConfigRange { channels: 12, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.13. SupportedStreamConfigRange { channels: 13, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.14. SupportedStreamConfigRange { channels: 14, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.15. SupportedStreamConfigRange { channels: 15, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.16. SupportedStreamConfigRange { channels: 16, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.17. SupportedStreamConfigRange { channels: 17, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.18. SupportedStreamConfigRange { channels: 18, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.19. SupportedStreamConfigRange { channels: 19, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.20. SupportedStreamConfigRange { channels: 20, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.21. SupportedStreamConfigRange { channels: 21, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.22. SupportedStreamConfigRange { channels: 22, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.23. SupportedStreamConfigRange { channels: 23, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.24. SupportedStreamConfigRange { channels: 24, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.25. SupportedStreamConfigRange { channels: 25, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.26. SupportedStreamConfigRange { channels: 26, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.27. SupportedStreamConfigRange { channels: 27, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.28. SupportedStreamConfigRange { channels: 28, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.29. SupportedStreamConfigRange { channels: 29, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.30. SupportedStreamConfigRange { channels: 30, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.31. SupportedStreamConfigRange { channels: 31, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.32. SupportedStreamConfigRange { channels: 32, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.33. SupportedStreamConfigRange { channels: 1, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.34. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.35. SupportedStreamConfigRange { channels: 3, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.36. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.37. SupportedStreamConfigRange { channels: 5, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.38. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.39. SupportedStreamConfigRange { channels: 7, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.40. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.41. SupportedStreamConfigRange { channels: 9, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.42. SupportedStreamConfigRange { channels: 10, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.43. SupportedStreamConfigRange { channels: 11, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.44. SupportedStreamConfigRange { channels: 12, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.45. SupportedStreamConfigRange { channels: 13, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.46. SupportedStreamConfigRange { channels: 14, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.47. SupportedStreamConfigRange { channels: 15, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.48. SupportedStreamConfigRange { channels: 16, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.49. SupportedStreamConfigRange { channels: 17, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.50. SupportedStreamConfigRange { channels: 18, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.51. SupportedStreamConfigRange { channels: 19, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.52. SupportedStreamConfigRange { channels: 20, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.53. SupportedStreamConfigRange { channels: 21, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.54. SupportedStreamConfigRange { channels: 22, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.55. SupportedStreamConfigRange { channels: 23, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.56. SupportedStreamConfigRange { channels: 24, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.57. SupportedStreamConfigRange { channels: 25, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.58. SupportedStreamConfigRange { channels: 26, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.59. SupportedStreamConfigRange { channels: 27, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.60. SupportedStreamConfigRange { channels: 28, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.61. SupportedStreamConfigRange { channels: 29, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.62. SupportedStreamConfigRange { channels: 30, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.63. SupportedStreamConfigRange { channels: 31, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.64. SupportedStreamConfigRange { channels: 32, min_sample_rate: SampleRate(1), max_sample_rate: SampleRate(384000), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   3. "sysdefault:CARD=PCH"
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Error: DeviceNotAvailable
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   4. "front:CARD=PCH,DEV=0"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Error: DeviceNotAvailable
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   5. "surround40:CARD=PCH,DEV=0"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Error: DeviceNotAvailable
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel map
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   6. "surround51:CARD=PCH,DEV=0"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Error: DeviceNotAvailable
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   7. "surround71:CARD=PCH,DEV=0"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices: Error: DeviceNotAvailable
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   8. "hdmi:CARD=PCH,DEV=0"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.1. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.2. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.3. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.4. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.5. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.6. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.7. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.8. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.9. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.10. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.11. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.12. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.13. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.14. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.15. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.16. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.17. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.18. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.19. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.20. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.21. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.22. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.23. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.24. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.25. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.26. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.27. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       8.28. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   9. "hdmi:CARD=PCH,DEV=1"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.1. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.2. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.3. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.4. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.5. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.6. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.7. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.8. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.9. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.10. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.11. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.12. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.13. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.14. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.15. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.16. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.17. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.18. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.19. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.20. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.21. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.22. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.23. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.24. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.25. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.26. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.27. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       9.28. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:   10. "hdmi:CARD=PCH,DEV=2"
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.1. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.2. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.3. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.4. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.5. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.6. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.7. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.8. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.9. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.10. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.11. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.12. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.13. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.14. SupportedStreamConfigRange { channels: 4, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.15. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.16. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.17. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.18. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.19. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.20. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.21. SupportedStreamConfigRange { channels: 6, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.22. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(32000), max_sample_rate: SampleRate(32000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.23. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.24. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(48000), max_sample_rate: SampleRate(48000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.25. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(88200), max_sample_rate: SampleRate(88200), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.26. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.27. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(176400), max_sample_rate: SampleRate(176400), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:       10.28. SupportedStreamConfigRange { channels: 8, min_sample_rate: SampleRate(192000), max_sample_rate: SampleRate(192000), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Range { min: 8, max: 1048576 }, sample_format: I16 }
15:22:30 [INFO] Selected audio source: default
15:22:30 [INFO] tb_log: Setup audio sources
15:22:30 [INFO] tb_log: Sorry, but you don't have permissions to raise priority...
15:22:30 [DEBUG] (1) swyh_rs: Try capturing system audio
15:22:30 [INFO] tb_log: Capturing audio from: default
15:22:30 [INFO] tb_log: Default audio SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Range { min: 1, max: 4194304 }, sample_format: F32 }
15:22:30 [INFO] tb_log: Discover networks
15:22:30 [INFO] tb_log: Starting SSDP discovery
15:22:30 [DEBUG] (3) swyh_rs::openhome::avmedia: SSDP discovery started
15:22:30 [DEBUG] (3) swyh_rs::openhome::avmedia: UDP response at 5 from 192.168.178.18:41535: 
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=300
DATE: Sun, 13 Feb 2022 15:22:30 GMT
EXT:
LOCATION: http://192.168.178.18:49152/description.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: f286a5f4-1dd1-11b2-bcdb-cf46d6e2c139
SERVER: Linux/3.12.74-retail-development, UPnP/1.0, Portable SDK for UPnP devices/1.6.19
X-User-Agent: redsonic
ST: urn:schemas-upnp-org:service:RenderingControl:1
USN: uuid:3d62cbc4-32f8-4fbc-8618-60b60625f03b::urn:schemas-upnp-org:service:RenderingControl:1


15:22:30 [DEBUG] (3) swyh_rs::openhome::avmedia: SSDP Discovery: AV renderer: http://192.168.178.18:49152/description.xml
15:22:30 [INFO] tb_log: The wave_reader is now receiving samples
15:22:33 [INFO] SSDP discovery: new Renderer found at : http://192.168.178.18:49152/description.xml
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: Getting new renderer descriptions
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: Get service description for http://192.168.178.18:49152/description.xml
15:22:33 [DEBUG] (3) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:33 [DEBUG] (3) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39746, peer: 192.168.178.18:49152, fd: 22 }
15:22:33 [DEBUG] (3) ureq::unit: sending request GET http://192.168.178.18:49152/description.xml
15:22:33 [DEBUG] (3) ureq::unit: writing prelude: GET /description.xml HTTP/1.1
Host: 192.168.178.18:49152
Accept: */*
User-Agent: swyh-rs-Rust
Content-Type: text/xml
accept-encoding: gzip
Content-Length: 0
15:22:33 [DEBUG] (3) ureq::unit: response 200 to GET http://192.168.178.18:49152/description.xml
15:22:33 [DEBUG] (3) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39746, peer: 192.168.178.18:49152, fd: 22 }
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: Service description:
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: <?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:qq="http://www.tencent.com" xmlns:dlna="urn:schemas-dlna-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<qq:X_QPlay_SoftwareCapability>QPlay:2</qq:X_QPlay_SoftwareCapability>
<UDN>uuid:3d62cbc4-32f8-4fbc-8618-60b60625f03b</UDN>
<friendlyName>Woonkamer</friendlyName>
<hostIpAddress>192.168.178.18</hostIpAddress>
<hostPortNo>49152</hostPortNo>
<manufacturer>Phorus</manufacturer>
<manufacturerURL>www.phorus.com</manufacturerURL>
<modelDescription>Phorus-Renderer</modelDescription>
<modelName>Phorus-Renderer</modelName>
<modelNumber>1.0</modelNumber>
<modelURL>www.phorus.com</modelURL>
<dlna:X_DLNADOC>DMR-1.50</dlna:X_DLNADOC>
<serialNumber>000000000001</serialNumber>
<UPC>000000000001</UPC>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>72</width>
<height>72</height>
<depth>32</depth>
<url>/upnpmplayer.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<controlURL>/upnp/control/AVTransport1</controlURL>
<eventSubURL>/upnp/event/AVTransport1</eventSubURL>
<SCPDURL>AVTransport.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<controlURL>/upnp/control/RenderingControl1</controlURL>
<eventSubURL>/upnp/event/RenderingControl1</eventSubURL>
<SCPDURL>RendererControl.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<controlURL>/upnp/control/ConnectionManager1</controlURL>
<eventSubURL>/upnp/event/ConnectionManager1</eventSubURL>
<SCPDURL>ConnectionManager.xml</SCPDURL>
</service>
<service>
<serviceType>urn:schemas-tencent-com:service:QPlay:2</serviceType>
<serviceId>urn:tencent-com:serviceId:QPlay</serviceId>
<controlURL>/upnp/control/QPlay1</controlURL>
<eventSubURL>/upnp/event/QPlay1</eventSubURL>
<SCPDURL>QPlayQueueService.xml</SCPDURL>
</service>
</serviceList>
<presentationURL></presentationURL>
</device>
<URLBase>http://192.168.178.18:49152/</URLBase>
</root>

15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: Renderer Woonkamer Phorus-Renderer ip 192.168.178.18 at urlbase http://192.168.178.18:49152/ has 4 services
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia:   => OpenHome Playlist control url: '', AvTransport url: '/upnp/control/AVTransport1'
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: .. urn:schemas-upnp-org:service:AVTransport:1 urn:upnp-org:serviceId:AVTransport /upnp/control/AVTransport1
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: .. urn:schemas-upnp-org:service:RenderingControl:1 urn:upnp-org:serviceId:RenderingControl /upnp/control/RenderingControl1
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: .. urn:schemas-upnp-org:service:ConnectionManager:1 urn:upnp-org:serviceId:ConnectionManager /upnp/control/ConnectionManager1
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: .. urn:schemas-tencent-com:service:QPlay:2 urn:tencent-com:serviceId:QPlay /upnp/control/QPlay1
15:22:33 [DEBUG] (3) swyh_rs::openhome::avmedia: SSDP discovery complete
15:22:33 [INFO] Found new renderer Woonkamer Phorus-Renderer  at 192.168.178.18
15:22:33 [DEBUG] (1) swyh_rs::ui::mainform: Pushed renderer #0 Phorus-Renderer Woonkamer, state = ON
15:22:33 [DEBUG] (1) swyh_rs::utils::configuration: Updated CONFIG: [Configuration]
ServerPort = 5901
AutoResume = true
SoundCard = "default"
LogLevel = "DEBUG"
SSDPIntervalMins = 1.0
AutoReconnect = true
DisableChunked = false
UseWaveFormat = false
BitsPerSample = 24
MonitorRms = false
LastRenderer = "Phorus-Renderer Woonkamer"
LastNetwork = "192.168.178.17"
ConfigDir = "/home/anieuwland/.swyh-rs"

15:22:33 [INFO] tb_log: AV Stop playing on Woonkamer host=192.168.178.18 port=49152
15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Stop,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Stop xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Stop></s:Body></s:Envelope>
15:22:33 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:33 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39748, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:33 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Stop"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 288
15:22:33 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:33 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39748, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39748, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:StopResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:StopResponse>
</s:Body> </s:Envelope>

15:22:33 [INFO] tb_log: AV Start playing on Woonkamer host=192.168.178.18 port=49152 from 192.168.178.17 using AvTransport Play
15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: AvTransport server URL: http://192.168.178.17:5901/stream/swyh.wav
15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>http://192.168.178.17:5901/stream/swyh.wav</CurrentURI><CurrentURIMetaData>&lt;DIDL-Lite xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot;&gt;&lt;item id=&quot;1&quot; parentID=&quot;0&quot; restricted=&quot;0&quot;&gt;&lt;dc:title&gt;swyh-rs&lt;/dc:title&gt;&lt;res bitsPerSample=&quot;24&quot; nrAudioChannels=&quot;2&quot; sampleFrequency=&quot;44100&quot; protocolInfo=&quot;&quot; duration=&quot;00:00:00&quot; &gt;http://192.168.178.17:5901/stream/swyh.wav&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>
15:22:33 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:33 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39750, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:33 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 1051
15:22:33 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:33 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39750, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39750, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:SetAVTransportURIResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:SetAVTransportURIResponse>
</s:Body> </s:Envelope>

15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Play,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>
15:22:33 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:33 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39752, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:33 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Play"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 304
15:22:33 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:33 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39752, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39752, peer: 192.168.178.18:49152, fd: 14 }
15:22:33 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:PlayResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:PlayResponse>
</s:Body> </s:Envelope>

15:22:34 [INFO] tb_log: The streaming server is listening on http://192.168.178.17:5901/stream/swyh.wav
15:22:34 [INFO] tb_log: Sample rate: 44100, sample format: audio/L24 (PCM)
15:22:34 [DEBUG] (5) tiny_http: Server listening on 192.168.178.17:5901
15:22:34 [DEBUG] (6) tiny_http: Running accept thread
15:22:36 [DEBUG] (1) swyh_rs::ui::mainform: Pushed renderer #0 Phorus-Renderer Woonkamer, state = OFF
15:22:36 [INFO] tb_log: AV Stop playing on Woonkamer host=192.168.178.18 port=49152
15:22:36 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Stop,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Stop xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Stop></s:Body></s:Envelope>
15:22:36 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:36 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39754, peer: 192.168.178.18:49152, fd: 23 }
15:22:36 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:36 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Stop"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 288
15:22:36 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:36 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39754, peer: 192.168.178.18:49152, fd: 23 }
15:22:36 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39754, peer: 192.168.178.18:49152, fd: 23 }
15:22:36 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:StopResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:StopResponse>
</s:Body> </s:Envelope>

15:22:37 [DEBUG] (1) swyh_rs::ui::mainform: Pushed renderer #0 Phorus-Renderer Woonkamer, state = ON
15:22:37 [DEBUG] (1) swyh_rs::utils::configuration: Updated CONFIG: [Configuration]
ServerPort = 5901
AutoResume = true
SoundCard = "default"
LogLevel = "DEBUG"
SSDPIntervalMins = 1.0
AutoReconnect = true
DisableChunked = false
UseWaveFormat = false
BitsPerSample = 24
MonitorRms = false
LastRenderer = "Phorus-Renderer Woonkamer"
LastNetwork = "192.168.178.17"
ConfigDir = "/home/anieuwland/.swyh-rs"

15:22:37 [INFO] tb_log: AV Stop playing on Woonkamer host=192.168.178.18 port=49152
15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Stop,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Stop xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Stop></s:Body></s:Envelope>
15:22:37 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:37 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39756, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:37 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Stop"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 288
15:22:37 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:37 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39756, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39756, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:StopResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:StopResponse>
</s:Body> </s:Envelope>

15:22:37 [INFO] tb_log: AV Start playing on Woonkamer host=192.168.178.18 port=49152 from 192.168.178.17 using AvTransport Play
15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: AvTransport server URL: http://192.168.178.17:5901/stream/swyh.wav
15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>http://192.168.178.17:5901/stream/swyh.wav</CurrentURI><CurrentURIMetaData>&lt;DIDL-Lite xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot;&gt;&lt;item id=&quot;1&quot; parentID=&quot;0&quot; restricted=&quot;0&quot;&gt;&lt;dc:title&gt;swyh-rs&lt;/dc:title&gt;&lt;res bitsPerSample=&quot;24&quot; nrAudioChannels=&quot;2&quot; sampleFrequency=&quot;44100&quot; protocolInfo=&quot;&quot; duration=&quot;00:00:00&quot; &gt;http://192.168.178.17:5901/stream/swyh.wav&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>
15:22:37 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:37 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39758, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:37 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 1051
15:22:37 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:37 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39758, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39758, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:SetAVTransportURIResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:SetAVTransportURIResponse>
</s:Body> </s:Envelope>

15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.178.18:49152/upnp/control/AVTransport1,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Play,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>
15:22:37 [DEBUG] (1) ureq::stream: connecting to 192.168.178.18:49152 at 192.168.178.18:49152
15:22:37 [DEBUG] (1) ureq::stream: created stream: TcpStream { addr: 192.168.178.17:39760, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) ureq::unit: sending request POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:37 [DEBUG] (1) ureq::unit: writing prelude: POST /upnp/control/AVTransport1 HTTP/1.1
Host: 192.168.178.18:49152
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Play"
Content-Type: text/xml; charset="utf-8"
accept-encoding: gzip
Content-Length: 304
15:22:37 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.178.18:49152/upnp/control/AVTransport1
15:22:37 [DEBUG] (1) ureq::pool: adding stream to pool: http|192.168.178.18|49152 -> TcpStream { addr: 192.168.178.17:39760, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) ureq::stream: dropping stream: TcpStream { addr: 192.168.178.17:39760, peer: 192.168.178.18:49152, fd: 23 }
15:22:37 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>
<u:PlayResponse xmlns:u="urn:upnp-org:serviceId:AVTransport"></u:PlayResponse>
</s:Body> </s:Envelope>

Autoresume not working with BubbleUPNP and Nest Audio

I use this chain to play audio:

Audio Player -> VB-Audio Virtual HiFi Cable -> SWYH-RS -> BubbleUPNP (DLNA mode) -> Google Nest Audio Stereo Pair

When swyh-rs is started, it works correctly and audio plays just like it should. However, after about ~20 minutes of having no music playing in my audio player, something breaks and there will be no more sound coming from my speakers. In fact, the debug log generates no entry at all for when audio is resumed after that time, so I added something manually.

swyh-rs is configured like so:

  • Autoresume is enabled
  • Autoreconnect is enabled
  • SSDP is at 10 minutes, but same issue existed with it at 1 minute
  • Disable Chunked TransferEncoding is disabled
  • Source is Hi-Fi Cable Input
  • Output is BubbleUPNP

This is the debug log, generated with the standard version and log level set to debug.

17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices: Supported hosts:
  [Wasapi]
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices: Available hosts:
  [Wasapi]
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices: WASAPI
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   Default Output Device:
    Some("Soundkarte (ASUS Xonar D2X Audio Device)")
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   Devices: 
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   1. "Hi-Fi Cable Input (VB-Audio Hi-Fi Cable)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:       1.1. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(44100), max_sample_rate: SampleRate(44100), buffer_size: Unknown, sample_format: F32 }
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Unknown, sample_format: F32 }
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   2. "Soundkarte (ASUS Xonar D2X Audio Device)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:     All supported output stream configs:
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:       2.1. SupportedStreamConfigRange { channels: 2, min_sample_rate: SampleRate(96000), max_sample_rate: SampleRate(96000), buffer_size: Unknown, sample_format: F32 }
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:     Default output stream config:
      SupportedStreamConfig { channels: 2, sample_rate: SampleRate(96000), buffer_size: Unknown, sample_format: F32 }
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   3. "Mikrofon (ASUS Xonar D2X Audio Device)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   4. "Wave (ASUS Xonar D2X Audio Device)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   5. "Hi-Fi Cable Output (VB-Audio Hi-Fi Cable)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   6. "Mikrofon (Steam Streaming Microphone)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   7. "SPDIF In (ASUS Xonar D2X Audio Device)"
17:27:48 [DEBUG] (1) swyh_rs::utils::audiodevices:   8. "Stereo Mix (ASUS Xonar D2X Audio Device)"
17:27:48 [INFO] Selected audio source: Hi-Fi Cable Input (VB-Audio Hi-Fi Cable)
17:27:48 [INFO] tb_log: Setup audio sources
17:27:48 [INFO] tb_log: Now running at ABOVE_NORMAL_PRIORITY_CLASS
17:27:48 [DEBUG] (1) swyh_rs: Try capturing system audio
17:27:48 [INFO] tb_log: Capturing audio from: Hi-Fi Cable Input (VB-Audio Hi-Fi Cable)
17:27:48 [INFO] tb_log: Default audio SupportedStreamConfig { channels: 2, sample_rate: SampleRate(44100), buffer_size: Unknown, sample_format: F32 }
17:27:48 [INFO] tb_log: Starting SSDP discovery
17:27:48 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP discovery started
17:27:48 [INFO] tb_log: The streaming server is listening on http://192.168.1.99:5901/stream/swyh.wav
17:27:48 [INFO] tb_log: Sample rate: 44100, sample format: audio/l16 (PCM)
17:27:48 [DEBUG] (5) tiny_http: Server listening on 192.168.1.99:5901
17:27:48 [DEBUG] (6) tiny_http: Running accept thread
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: UDP response at 2631 from 192.168.1.99:50826: 
HTTP/1.1 200 OK
Ext: 
St: urn:schemas-upnp-org:service:RenderingControl:1
Server: Windows10/10.0 UPnP/1.0 BubbleUPnPServer/0.9-update38
Usn: uuid:a650210f-9d3e-1235-0000-00004d059e7e::urn:schemas-upnp-org:service:RenderingControl:1
Cache-control: max-age=1800
Location: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml


17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP Discovery: AV renderer: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:27:51 [INFO] SSDP discovery: new Renderer found at : http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: Getting new renderer descriptions
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: Get service description for http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:27:51 [INFO] sending request GET http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:27:51 [DEBUG] (4) ureq::unit: writing prelude: GET /dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml HTTP/1.1
Host: 192.168.1.99:49836
Accept: */*
User-Agent: swyh-rs-Rust
Content-Type: text/xml
Content-Length: 0


17:27:51 [DEBUG] (4) ureq::unit: response 200 to GET http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: Service description:
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: <?xml version="1.0" encoding="utf-8" standalone="yes"?><root xmlns="urn:schemas-upnp-org:device-1-0"><specVersion><major>1</major><minor>0</minor></specVersion><device><deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType><UDN>uuid:a650210f-9d3e-1235-0000-00004d059e7e</UDN><friendlyName>Nest Audios (DLNA)</friendlyName><manufacturer>Bubblesoft</manufacturer><manufacturerURL>http://forum.xda-developers.com/showthread.php?t=1118891</manufacturerURL><modelDescription>BubbleUPnP Google Cast DLNA renderer</modelDescription><modelName>BubbleUPnP Google Cast DLNA renderer</modelName><modelNumber>0.9-update38</modelNumber><modelURL></modelURL><serialNumber>0.9-update38</serialNumber><presentationURL>http://192.168.1.99:58050</presentationURL><dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC><iconList><icon><mimetype>image/png</mimetype><width>98</width><height>55</height><depth>32</depth><url>/dev/a650210f-9d3e-1235-0000-00004d059e7e/icon.png</url></icon></iconList><serviceList><service><serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType><serviceId>urn:upnp-org:serviceId:AVTransport</serviceId><controlURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action</controlURL><eventSubURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/event</eventSubURL><SCPDURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/desc.xml</SCPDURL></service><service><serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType><serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId><controlURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/RenderingControl/action</controlURL><eventSubURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/RenderingControl/event</eventSubURL><SCPDURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/RenderingControl/desc.xml</SCPDURL></service><service><serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType><serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId><controlURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/ConnectionManager/action</controlURL><eventSubURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/ConnectionManager/event</eventSubURL><SCPDURL>/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/ConnectionManager/desc.xml</SCPDURL></service></serviceList></device></root>
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: Renderer Nest Audios (DLNA) BubbleUPnP Google Cast DLNA renderer ip 192.168.1.99 at urlbase http://192.168.1.99:49836/ has 3 services
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia:   => OpenHome Playlist control url: '', AvTransport url: '/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action'
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: .. urn:schemas-upnp-org:service:AVTransport:1 urn:upnp-org:serviceId:AVTransport /dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: .. urn:schemas-upnp-org:service:RenderingControl:1 urn:upnp-org:serviceId:RenderingControl /dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/RenderingControl/action
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: .. urn:schemas-upnp-org:service:ConnectionManager:1 urn:upnp-org:serviceId:ConnectionManager /dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/ConnectionManager/action
17:27:51 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP discovery complete
17:27:51 [INFO] Found new renderer Nest Audios (DLNA) BubbleUPnP Google Cast DLNA renderer  at 192.168.1.99
17:27:51 [DEBUG] (1) swyh_rs: Pushed renderer #0 BubbleUPnP Google Cast DLNA renderer Nest Audios (DLNA), state = ON
17:27:51 [INFO] tb_log: AV Stop playing on Nest Audios (DLNA) host=192.168.1.99 port=49836
17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Stop,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Stop xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID></u:Stop></s:Body></s:Envelope>
17:27:51 [INFO] sending request POST http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (1) ureq::unit: writing prelude: POST /dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action HTTP/1.1
Host: 192.168.1.99:49836
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Stop"
Content-Type: text/xml; charset="utf-8"
Content-Length: 288


17:27:51 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <?xml version="1.0" encoding="utf-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:StopResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"/></s:Body></s:Envelope>

17:27:51 [INFO] tb_log: AV Start playing on Nest Audios (DLNA) host=192.168.1.99 port=49836 from 192.168.1.99 using AvTransport Play
17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: AvTransport server URL: http://192.168.1.99:5901/stream/swyh.wav
17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><CurrentURI>http://192.168.1.99:5901/stream/swyh.wav</CurrentURI><CurrentURIMetaData>&lt;DIDL-Lite xmlns=&quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:upnp=&quot;urn:schemas-upnp-org:metadata-1-0/upnp/&quot;&gt;&lt;item id=&quot;1&quot; parentID=&quot;0&quot; restricted=&quot;0&quot;&gt;&lt;dc:title&gt;swyh-rs&lt;/dc:title&gt;&lt;res bitsPerSample=&quot;16&quot; nrAudioChannels=&quot;2&quot; protocolInfo=&quot;http-get:*:audio/l16;rate=44100;channels=2:DLNA.ORG_PN=LPCM&quot; sampleFrequency=&quot;44100&quot; duration=&quot;0&quot; &gt;http://192.168.1.99:5901/stream/swyh.wav&lt;/res&gt;&lt;upnp:class&gt;object.item.audioItem.musicTrack&lt;/upnp:class&gt;&lt;/item&gt;&lt;/DIDL-Lite&gt;</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>
17:27:51 [INFO] sending request POST http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (1) ureq::unit: writing prelude: POST /dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action HTTP/1.1
Host: 192.168.1.99:49836
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"
Content-Type: text/xml; charset="utf-8"
Content-Length: 1099


17:27:51 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <?xml version="1.0" encoding="utf-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURIResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"/></s:Body></s:Envelope>

17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: url: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action,
=>SOAP Action: urn:schemas-upnp-org:service:AVTransport:1#Play,
=>SOAP xml: 
<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Speed>1</Speed></u:Play></s:Body></s:Envelope>
17:27:51 [INFO] sending request POST http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (1) ureq::unit: writing prelude: POST /dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action HTTP/1.1
Host: 192.168.1.99:49836
Connection: close
User-Agent: swyh-rs-Rust/0.x
Accept: */*
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#Play"
Content-Type: text/xml; charset="utf-8"
Content-Length: 304


17:27:51 [DEBUG] (1) ureq::unit: response 200 to POST http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/svc/upnp-org/AVTransport/action
17:27:51 [DEBUG] (1) swyh_rs::openhome::avmedia: <=SOAP response: <?xml version="1.0" encoding="utf-8" standalone="yes"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:PlayResponse xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"/></s:Body></s:Envelope>

17:27:52 [INFO] tb_log: Received request /stream/swyh.wav from 192.168.1.99:55306
17:27:52 [DEBUG] (8) swyh_rs: Now have 1 streaming clients
17:28:12 [INFO] tb_log: The wave_reader is now receiving samples
17:37:51 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP discovery started
17:37:53 [DEBUG] (4) swyh_rs::openhome::avmedia: UDP response at 2181 from 192.168.1.99:50826: 
HTTP/1.1 200 OK
Ext: 
St: urn:schemas-upnp-org:service:RenderingControl:1
Server: Windows10/10.0 UPnP/1.0 BubbleUPnPServer/0.9-update38
Usn: uuid:a650210f-9d3e-1235-0000-00004d059e7e::urn:schemas-upnp-org:service:RenderingControl:1
Cache-control: max-age=1800
Location: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml


17:37:53 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP Discovery: AV renderer: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:37:54 [INFO] SSDP discovery: Skipping known Renderer at http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:37:54 [DEBUG] (4) swyh_rs::openhome::avmedia: Getting new renderer descriptions
17:37:54 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP discovery complete
17:47:54 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP discovery started
17:47:56 [DEBUG] (4) swyh_rs::openhome::avmedia: UDP response at 1845 from 192.168.1.99:50826: 
HTTP/1.1 200 OK
Ext: 
St: urn:schemas-upnp-org:service:RenderingControl:1
Server: Windows10/10.0 UPnP/1.0 BubbleUPnPServer/0.9-update38
Usn: uuid:a650210f-9d3e-1235-0000-00004d059e7e::urn:schemas-upnp-org:service:RenderingControl:1
Cache-control: max-age=1800
Location: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml


17:47:56 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP Discovery: AV renderer: http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:47:57 [INFO] SSDP discovery: Skipping known Renderer at http://192.168.1.99:49836/dev/a650210f-9d3e-1235-0000-00004d059e7e/desc.xml
17:47:57 [DEBUG] (4) swyh_rs::openhome::avmedia: Getting new renderer descriptions
17:47:57 [DEBUG] (4) swyh_rs::openhome::avmedia: SSDP discovery complete

------------------------
Manual entry - music resumes playing around 17:57:00 but log generates no entry for that. No sound is coming from the speakers.
------------------------
17:57:22

Also, I noticed the time in the logs is off by 1 hour, but that isn't really a problem I guess :)

Windows x64 to Sonos: Unable to connect

Hi,

I'm on Windows 10 x64 and am trying to stream to different Sonos devices. SWYH finds and lists all of them correctly, I can activate each one (except obviously ones that are defined as stereo speakers, which makes sense), the log states it's streaming (http://192.168.XX.XX:5901/stream/swyh.wav), and in the Sonos app I can see that the speaker is playing the stream. There's no sound though. After a bit, I get an error message inside the Sonos app: Unable to play "swyh.wav" - unable to connect to http://192.168.XX.XX:5901.

"Add WAV Hdr" is turned on as per the readme.

Any advice? Thanks in advance.
-- Jakob

Docker Support

Looking for a way to stream docker container audio using this app.

Allow network selection for ssdp discovery

@desaiamogh:
Your issue is not related, but it's a valid request. Currently the interface that can connect to the internet is used. I could add a dropdown with the available networks and remember the last choice, while keeping current behaviour on the first start after installation.

Originally posted by @dheijl in #40 (comment)

Old / corrupted config.toml causes program to panic

Hello!

After updating swyh-rs for the first time in months it wouldn't start anymore. The backtrace revealed that it panicked trying to load my old config.toml created by the previous version (which had less entries than the current one).

I noticed that at the moment the program only checks for an existing 'config.ini' and migrates its contents to a new config.toml file, however as long as a file with name 'config.toml' exists it doesn't check its validity.

The program panics here at the .unwrap() since de-serializing fails when the toml file is missing some fields (or is otherwise corrupted).

A quick fix should be implementing the Default trait for Config:

impl Default for Config {
    fn default() -> Self {
        Config { configuration: Configuration::default() }
    }
}

and then calling .unwrap_or_default() instead of .unwrap():

let mut config: Config = from_str(&s).unwrap_or_default();

However, considering that the old ini files also get migrated the preferred behavior would be trying to recover as many values as possible from the old file and only updating the missing fields with their respective default values, no?

Adding functionality "Record what you hear"?

Hi and first of all thanks for your nice work :-)

Do you have a plan to add also the functionality "Record what you hear", preferably without a file size restriction?

In the original "SWYH" there's a file size limit which is sad since every time I record a long audiobook for later offline-hearing the recording stops after approx. 3 hours...

Thanks again and best regards

No stream to harmann kardon AVR265

Hi @dheijl
I try your new SWYH-RS, but I've got error ๐Ÿ‘
SSDP discovery started
Renderer at : http://192.168.1.26:80/dd.xml
Getting renderer descriptions
Renderer Harman Kardon AVR265 None 192.168.1.26 has 3 services
SSDP discovery complete
Default audio output device: Speakers (Intel SST Audio Device (WDM))
Default config SupportedStreamConfig { channels: 2, sample_rate: SampleRate(48000), buffer_size: Unknown, sample_format: F32 }
Serving on 192.168.1.27:5901
The wave_reader is receiving samples
Error relative URL without a base parsing url
Start playing on Harman Kardon AVR265 host=0.0.0.0 port=0 from 192.168.1.27

With classic SWYH I manage to send the sound to my amp but after a while I lost the connection, having to restart everything.
I found another opensource software which is older but works without disconnection, maybe it can help you in the development of this new swyh-rs ..
https://github.com/protyposis/LocalAudioBroadcast

Thank for all..

not all renders shown in gui

i have more than 5 renderers in my network, but i can see only 2 out of them in the GUI. And every time i start swyh-rs the second renderer shown is changing to another one. The first one stays the same. How can i select a specific renderer out of 5, is it possible to scroll the list ?

audible low noise in every stream

I find that there is a very audible low background noise in everything I stream through swhy-rs, regardless of the source or the recording. This only happens with swyh-rs.

I am on Windows 10, streaming via Volumio.

Concept for a logo/icon

Hello! After using this tool for a bit I thought maybe it should have an icon. Here are some variations on an idea for an icon.
image
image
image

Volume difference

Hi dheijl, little feedback ..
As you know I use swyh-rs especially with Deezer, today I am testing the sending of sound with Youtube launched on Microsoft Edge, and I have, despite having the volume Max on youtube, a very low volume in the swyh-rs stream .. I also tried with Molotov (a French TV application) same result despite the max volume in the application the stream remains at very low level .. .
Is there a way to choose the sound level of what we send in the stream or to normalize the output stream to a level (0dB) that we could adjust?
I don't understand why I have such a low volume with Edge or Molotov while with Deezer it works well ...

Build for ubuntu 18.04?

Would it be possible for you to make a build for ubuntu 18.04? I tried the 20.04 build but gives error massages about the version of glibc. I have lubuntu 18.04 on my PC's.

Provide a server mode for devices that are not renderers (SWYH feature parity)

The original SWYH provides a server accessible by Media Players as well as the traditional Stream To/PlayTo mode of pushing to Renderers. When SWYH is running, the audio stream is also exposed as two "songs" for the different codecs the original SWYH supports, which any player can access (theoretically, as I'm having an issue with theirs, and I think it's an implementation issue).

This would be useful to me because of this, but it would be useful for situations where the target device does not support rendering at all. It'd make this project an even more complete replacement. Sorry for the trouble. (=

See also: "If the device is an UPnP/DLNA Media Player" section.

Stream playback doesn't start on Libratone Zipp with 1.3.24

First, thanks for this nice piece of software! :)
Since the release 1.3.24, streaming my sound to a Libratone Zipp speaker doesn't work.

Here's what I do:

  1. Make sure that the speaker is on
  2. Make sure that I already stream some audio
  3. Download and launch the 1.3.24 release on Windows 10 21H1 x64
  4. Select the LTH Zipp speaker
  5. Audio don't start and the following happen in the log:
    image

With the previous version, it successfully works:

  1. and 2. are the same
  2. Download and launch the 1.3.23 release on Windows 10 21H1 x64
  3. Select the LTH Zipp speaker
  4. Enjoy good sounds - here's the log
    image

Let me know if you need something else to debug this!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.