Hey! I have been working on this project for about a year now. It's a many sources to many sinks audio routing solution.
Here's the site I made for it
For stream receivers there are currently:
For stream senders there are currently:
On a technical level, the way the audio router works is:
The goal of this was to have a dynamic multi-threaded approach that could use multiple cores and doesn't bog down under many sources/sinks. I haven't tested anything this large but I'd really like to see it tried for like a whole building audio system, I think it'd work.
You can see all of the repos on my Github
I have tried to make the UI as convenient to use as possible. The UI is a React-based UI running with a FastAPI/Python configuration manager and a C backend for audio processing.
There is an option to add a VNC server for each source that can be remote controlled through noVNC from the web interface.
There's a Home Assistant component for managing it, too
There is also a Windows Desktop App that adds an icon to the notification area next to the volume control and pops up a slide-out mini control for the system, and can open the full view. This app is C# so it may work on Linux with Mono too but this is as of now untested.
It's got Milkdrop visualizations using Butterchurn
Please let me know if anyone tries it or has any issues, I'd like to hear about it.
Here's the site I made for it
For stream receivers there are currently:
- Support for sending to SPDIF devices through ESP32
- USB devices through ESP32S3 (UAC 1.0 compatible DACs + added support for Apple USB to 3.5mm DAC)*
- Raspberry Pi/Linux - Supports 7.1
- Windows - Supports 7.1
- A web interface that streams MP3s
For stream senders there are currently:
- A Windows Sender application - Supports 7.1
- A legacy Windows driver - Supports 7.1, install is messy due to a certificate issue. This was created by duncanthrax and is what I initially started ScreamRouter to support
- PulseAudio/PipeWire support (accepts RTP streams that are 16-bit 48khz stereo PCM in 1152 byte chunks)
- ESP32S3 and Raspberry Pi Zero Gadget USB senders that act as USB sound cards (for use with PS5, Switch, or PC, or anything that works with standard USB audio)
- A plugin that can play URLs through ffmpeg to a source
- A plugin system to create temporary and permanent sources so new sources can be added
- Docker containers for Amazon Music, Spotify, and Firefox that route audio through PulseAudio and can be accessed through noVNC on the website
On a technical level, the way the audio router works is:
- The configuration manager solves groupings/routing and builds a map of real sources per real sink
- For each source->sink route, a conversion process is started to convert it to the proper audio format for the output (channel mixing, equalizer, volume, sample rate, bit depth)
- For each sink, a mixer is created. This mixer takes all of the source inputs and mixes them together, outputs PCM to Scream and outputs MP3 frames to the Python backend to be served as MP3s over FastAPI.
The goal of this was to have a dynamic multi-threaded approach that could use multiple cores and doesn't bog down under many sources/sinks. I haven't tested anything this large but I'd really like to see it tried for like a whole building audio system, I think it'd work.
You can see all of the repos on my Github
I have tried to make the UI as convenient to use as possible. The UI is a React-based UI running with a FastAPI/Python configuration manager and a C backend for audio processing.
There is an option to add a VNC server for each source that can be remote controlled through noVNC from the web interface.
There's a Home Assistant component for managing it, too
There is also a Windows Desktop App that adds an icon to the notification area next to the volume control and pops up a slide-out mini control for the system, and can open the full view. This app is C# so it may work on Linux with Mono too but this is as of now untested.
It's got Milkdrop visualizations using Butterchurn
Please let me know if anyone tries it or has any issues, I'd like to hear about it.