New experimental "Sendspin protocol" (formerly "Resonate") for streaming synchronized multi-room audio and hi-fi quality music playback to multiple media player appliances and smart speakers running ESPHome on ESP32 or Linux on Raspberry Pi #4200
Replies: 22 comments 35 replies
|
A few questions come to mind: What is the audio quality of this new protocol? Does it support high resolution audio? Does it use lossless encoding? Does it support clients other than ESP32 based microcontrollers? |
|
@marcelveldt do you plan to make a default/reference "Resonate Media Player" Linux-based client to run on Raspberry Pi hardware? Perhaps even a complete "Hi-Fi" media player client Linux distribution (based HAOS/HassOS if not LibreELEC OS or similar JeOS Linux distro)? That is, as there is no guarantee that third-party media players will adopt/implement support for this Resonate protocol I was wondering it the Open Home Foundation plan to make a reference media player software application for Linux that support Resonate protocol on Raspberry Pi? Asking since Raspberry Pi running Linux is today probably the most popular platform for DIY line-out WiFi client solution for multi-room audio. Suggesting a stand-alone all-in-one music player component package for Linux to make it simple to setup a Resonate client media player and achieve audio synchronized playback that more or less matches what kahrendt is developing for ESPHome here, (but for Raspberry Pi instead): Example a Raspberry Pi with either HiFi DAC + Amplifier hardware HATs or a USB Audio Device Interface adapter for audio output like these:
PS: FYI, indirectly related is that synesthesiam begun working on a Linux-based Voice Satellite for Home Assistant using the ESPHome protocol (i.e. porting ESPHome to Linux) as the successor/replacement for Rhasspy's Wyoming Satellite remote voice satellites on Raspberry Pi hardware: Quoting synesthesiam comment/reply on that Reddit:
|
|
@maximmaxim345 have you by the way looked at Matter Casting APIs & architecture to see if it has any good concepts that can be borrowed?
PS: One major limitation is the the current Matter Casting specification is that they are still missing support for the audio-only part of its architecture as their casting technology focus so far has just been on video streaming and this there is not yet any audio-only APIs or examples for smart-speakers or music-recievers, but I understand that some Connectivity Standards Alliance members have started to look at that now: |
|
Maybe should have posted the idea here instead, but wondering if can get a Resonate Protocol and ESPHome solution for these use cases? See: What it would basically achieve is enable network-attached stereo sound input device for analogue HiFi sources that digitize and stream audio: See ESP32-based draft prototype for a ESPHome proof-of-concept development kit hardware (PCB schematic design by @alextrical) here: Related discussion and request for help with ESPHome Audio ADC drivers and pipeline for streaming audio from ESP32 to Music Assistant: PS: The concept described really need to do beyond the request with the of Music Assistant Server using a sound card input as local audio-in: |
|
FYI, Music Assistant 2.7.0 BETA 0 release has now added an initial (experimental) MA music provider for this new Resonate streaming protocol: Note that there is still not yet any Resonate clients released so those you currently need to build yourself if you want to experiment with this: |
|
@maximmaxim345 what is the current overall status of the Resonate specification/protocol and reference server/provider and clients/players? @kahrendt Any chance we will see an experimental player be merged into ESPHome and/or linux-voice-assistant before the end of this year? |
|
For reference; the implementation of Resonate has now been renamed to "Sendspin" (i.e. "Sendspin Audio"): It is however not clear if that will be the final name, so the name and specs are still subject to change. You can already stream audio/music via Sendspin using the beta version of Music Assistant (server): Development on the Sendspin component for ESPHome has been refactored in this new PR here: If can now test alpha/pre-release builds of ESPHome with it for the Home Assistant Preview Edition: Or you can today run a Resonate command-line server and client powered by resonate-go yourself: If you have any feedback joint the #sendspin-beta-testing channel on the Music Assistant Discord: PS: It sounds as if Sendspin component will not be merged into ESPHome mainline until next year. |
|
Originally posted by @marcelveldt in #4200 (reply in thread)
@maximmaxim345 any chance or @kahrendt could develop an official Sendspin audio player/client for OHF-Voice's new linux-voice-assistant? "Linux Voice Assistant" from the Open Home Foundation is a new experimental Linux voice assistant for Home Assistant that uses the ESPHome protocol, and it is being developed by @synesthesiam as a replacement to his previous Wyoming-satellite (Linux-based remote voice satellites): That is, it would be great if that project from the Open Home Foundation also officially fully supported the Sendspin protocol. See request: and this additional related request as would be awesome if a such Linux Voice Assistant could also be used as a Sendspin server with local-input:
For reference on what the "Linux Voice Assistant" from the Open Home Foundation is about read this quote from synesthesiam's post on reddit: To give some context: the Wyoming protocol was developed for voice services like speech-to-text, text-to-speech, etc. I added satellite messages early on so we could use Raspberry Pi's alongside the ESPHome devices. Over time, the Wyoming Satellite feature set has fallen behind ESPHome and it's felt like I'm basically recreating the ESPHome messages in Wyoming. So I had the idea: why not just implement a tiny subset of the ESPHome protocol on Linux and reuse what's already there? This turned out to be way easier than I expected! It also has the benefit that I can expose the media player properly now, and it will be possible to expose LED rings and buttons too in the future without any changes to Home Assistant. The Raspberry Pi satellite just looks like an ESPHome device with the proper entities already in place. At the moment, this project only supports microWakeWord but I'd like to add openWakeWord support soon (PRs welcome). I'm also using the mpv media player directly now for audio output so I can mix audio streams properly. Things like timers, announcements, start conversation, audio ducking, etc. all just work out of the box. It should also be possible to use PipeWire/PulseAudio plugins for acoustic echo cancellation (AEC) so the wake word can still be heard over music. The next step will be to add a proper tutorial and start collecting feedback from beta users :) |
|
Hey there, I've spun up the v 2.7 MA container and even though I have sendspin enabled when I click on play it wont show me any players. I thought it would automatically play on the web UI? Is this because of a misconfiguration? Or what else do I need to do? I've double-checked that the port is open (telnet from local device to server) and don't really know what else to do. Even disabled and reenabled the sendspin plugin, but sadly no change. |
|
FYI, an alternative could be to build new ARM64-based hardware solutions that runs the Linux-Voice-Assistant project is a new experimental voice satellite solution from the Open Home Foundation which will likley get Sendspin audio player client support sooner or later: That is, while Linux-Voice-Assistant main purpose is to allow you to build a Linux-based voice assistant smart speaker that runs on any x64 or ARM64 hardware capable of handling local and on-device audio processing, however similar to ESPHome it can also be used without microphone/voice as a just a output-only music reciever/speaker, (i.e. a dedicated network audio streamer). This approach provides greater flexibility for customization compared to ESP32-based microcontroller hardware. Because it runs on a full Linux system, it also gives you access to significantly more local computing resources for additional features and other integrations on the same satellite. Hardware-wise it is primarly designed to run on Raspberry Pi (Raspberry Pi Zero 2 W or Raspberry Pi 3 and better) and used in combination with a audio-HAT for Raspberry Pi GPIO pins, such as example those from HiFiBerry or Sonocotta. |
|
For reference, missed that this blog post about Music Assistant 2.7 contain an official public introduction to Sendspin meant for MA end-users: Introducing SendspinFor some time, the Music Assistant team has been looking for the best way to stream audio, album art, and other music visualizations to the devices we have around our homes. There are a couple of projects out there doing cool stuff with streaming audio, but not any that fit our needs. So, when it doesn’t exist, it’s time to start building. Introducing Sendspin, a new multimedia streaming and synchronizing protocol. It’s fully open source and free to use. Sendspin can stream high-fidelity audio, album art, and visualizer data, automatically adapting to each device’s capabilities. Imagine an e-paper display showcasing the album cover, while multiple speakers play in sync, and smart lights pulse to the rhythm. The best way to use it right now is either via your browser or a Home Assistant Voice Preview Edition running beta firmware. We’ve built the experimental ability to use Sendspin on Google Cast-capable speakers (we’re also looking to do the same with AirPlay-capable speakers), which will allow Sendspin to work with a lot of different hardware. A big thanks to Maxim and Kevin at the Open Home Foundation, who have been instrumental in making Sendspin a reality. Even though it can do some impressive stuff today, it’s very much a tech preview, and this announcement is our call to all developers and DIY audio hobbyists – we need your help building and testing this. This is the spec, start building with it! All the best things in life are meant to be shared, and your music should be as free and open as the software we love. So spin that record 💿, drop the needle, and send that music across your entire home. And then missed that Music Assistant 2.8 introduced the concept of Sendspin Bridges: Sendspin BridgesBefore this release, if you wanted to group a Sonos speaker with a Google Nest (via Chromecast), you were out of luck. In 2.8, we’ve introduced Sendspin Bridges, which “wraps” Sendspin around your existing Chromecast and AirPlay-capable devices (such as Sonos). By turning these devices into Sendspin players, Music Assistant can now treat them as one big, happy family. You can finally create a Sendspin Group that mixes and matches brands, keeping them in perfect sync. Your Sonos in the lounge and your Chromecast in the kitchen are finally on the same team! FYI, the founder of Music Assistent and lead of the Open Foundation protocols ecosystem also mentioned in the Music Assistent 2.8 Release Party video that the upcoming State of the Open Home 2026 will have a segment where they will share more on the progress of Sendspin: Hopefully they will also share what’s ahead, with a roadmap and/or future plans for Sendspin with wider goals they want to try achieving during this year. |
|
Tip and FYI, for reference, @RealDeco has published a repository named SendspinZero on GitHub with part-lists and step-by-step instructions needed to build several different variants of compact and minimalistic hardware ESP32-based Sendspin client media players running ESPHome (made for use with Music Assistant server). All are based on around the Waveshare ESP32-S3-Zero dev board, and ESPHome YAML configuration for all variants + 3D-files for 3D.printable cases for each variant + links to where all parts can be sourced from Aliexpress): Note that are variants with and without a display in that repo that add a button and RGB-light or even show album cover art, Song, and Artist on the scrren while playing music (or a weather clock when not playing). Plus a variant with amplifier for analog speaker.
Currently he essentially has three build versions, then there are additional variants of those so you can almost mix and match as you want:
If you want to test the SPDIF output PR he also includes an absolut minimal variant with only a Toslink optical digital audio output module:
And there is a S/PDIF Coax (Coaxial digital audio output) variant which is simpler since it just need two wires and a resistor, which would also be interesting to test because while TOSLINK maximum sample rate limit is 96kHz, the maximum sample rate for S/PDIF Coax is 192kHz, (and both support up to 24bit bit-depth when outputting stereo PCM):
|
|
FYI, another alternative step-by-step guide for a simple DIY seup with ESP32 and SPDIF digital output via ESPHome been posted by @Rudd-O here: |
|
FYI, the founder of Music Assistant and one of the developers working on Sendspin discussed its origen + future plans during the State of the Open Home 2026 live video stream at 1:01 time-mark: For reference, State of the Open Home 2026 covers what Open Home Foundation has done the past year and what it plan to do in the future: |
|
FYI, Sonocotta developer @anabolyc are now providing a full range of tested and working ESPHome firmware images with Sendspin enabled for use on his ESP32 Audio devices:
Also, HouseWaves has posted a very detailed step-by-step guide on installing ESPHome firmware with the SendSpin streaming protocol client on the Sonocotta ESP32-LOUD board here: Note that he himself got issues with stuttering when audio started but someone else had the same symtom workarround by reducing config for the network power using the output_power argument But then ESPHome 2026.5 should be released in a few weeks and it also contains some fixes like: |
|
I know, ESPHome 2026.5 is still in progress, but it works now very well with the latest dev build. Except for the MA playback with opus codec.... ESP says it is a media source error. From HA it is ok, so maybe Music Assistant has some customization when the opus stream is constructed. (Assumed by the doc ) - According to the ESPHome doc : OPUS is only supported with 48kHz) @OzGav Can somebody confirm from the MASS developer side? I'm still unsure is it an ESPHome issue, or MASS issue. moreover, If I choose a right codec (eg mp3) the playback pause if I choose the prev/next track from the playlist. Even if I click on the seek bar: for the second click on the seek bar, it jumps to the right place then continue the playback from the expected place.... |
|
I've updated all sendspin configs, both for ESP32-Audio and Esparagus boards, so feel free to give it a try. If you build in the HA, you'll need to install the ESPHome (dev) addon, but in a couple of weeks, it will be available in the standard ESPHome In my short tests, there were no crashes (good start!), no drops during playback, and almost no stutter from the start. People report some codec incompatibility, so more improvements will follow, but it is very much usable now. Another apparent change - it no longer uses PR versions for the components, all necessities right now pulled directly from ESPHome - good sign that Sendspin maturity is growing. Also, probably more people will join the beta-testing now |
|
FYI, the SPDIF output support has now also been merged so should make it together Sendspin into the upcoming ESPHome 2026.5 release:
And in case you missed it, the Sendspin component has now been merged to so included by default in the upcoming ESPHome 2026.5 release:
|
|
all devices in the SendspinZero project has been update for esphome 2026.5.0b1: |
FYI, ESPHome 2026.5.0b1 (Beta 1) is now available with beta changelog posted: |
|
Well, maybe I do something wrong, but I cannot put the ESP32 (with sendspin through HA) with other sendspin player into a synced group. Is it worth a FR? |
ESPHome 2026.5.0 has now been released with a family of Sendspin components included by default:
The new ESPHome 2026.5 release also contains major performance optimizations, including a modernized audio decoder pipeline, as well as a new (beta) ESPHome Device Builder web: |






Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Update: Specification and implementations of Resonate has been renamed to “Sendspin” (i.e. “Sendspin Protocol” “Sendspin Server/Client”):
https://www.sendspin-audio.com/
Update! Music Assistant server now have built-in native support for Sendspin that is enabled by default as an official technical-preview from the Open Home Foundation and development of its server and client implementations are moving very fast:
Not sure if this will be usable on all ESPHome based audio output/input devices running on ESP32 (i.e. voice assistants, media player, and smart speaker hardware), but FYI, I heard it sounds like (pun intended) some Open Home Foundation and Music Assistant developers have started working on a new experimental open-source Hi-Fi audio streaming protocol for a better multi-room audio and music playback experience on embedded hardware running ESPHome-based client on ESP32 as well as Linux-based client on the roadmap for Raspberry Pi (Zero):
This new protocol specification is design from scratch but is similar to Squeezelite and Snapcast as well as Music Player Daemon (MPD) in concept at a high level, Resonate is not a stand-alone player, but an extension that can turn an existing audio player into a Sonos-like multiroom audio solution with time synchronized between the clients and the server to play perfectly synced audio. In their own tests they claim to see that average time deviation is below 0.05ms for synced audio (50 microseconds between two ESP32-S3 devices running ESPHome and connected over WiFi). Think of it like a completly royalty-free and open-source competition to Apple AirPlay (formerly AirTunes) and Google Cast (Chromecast Audio) propriatory protocols but for implementing HiFi multi-room audio solutions.
“Resonate is a multi-room music experience protocol. The goal of the protocol is to orchestrate all devices that make up the music listening experience. This includes outputting audio on multiple speakers simultaneously, screens and lights visualizing the audio or album art, and wall tablets providing media controls.” “Definitions; Server, a Resonate server. Orchestrates all devices. Generates an audio stream, manages all the players, provides metadata etc… Player, a Resonate client that can play audio, visualize audio or album art or provide music controls”.
Resonate Project Board (Backlog and Roadmap):
Btw, Music Assistant lead developer posted a reply in their discussion section answering the question why they choose to not just use Snapcast:
With this new "Resonate" protocol the Music Assistant client/server and ESPHome will also get a new experimental audio player component that adds support for the this "Resonate Protocol" for synchronized music-playback across multiple devices, (i.e. audio synchronizer between ESPHome-based to enable sound-sync timing for DIY multi-room audio players), as well as ability to also switch codecs on-the-fly.
For a WIP reference implementation of a server using their aioresonate (Async Python library see how it is implemented in Music Assistant:
Update:
Above replaces:
and
Implementation Details:
Time Synchronization:
Architecture:
mDNS:
External Dependencies:
Testing:
Currently compatible with:
Example entry for config.yaml:
Current Status:
resonatebranchFuture Work:
There was some discussions + further explainations on its concept in a other thead that asked about this new multi-room streaming protocol:
Originally posted by @marcelveldt in #3883 (comment)
If I understand correctly this new Resonate synchronized audio component will add a flexible hub architecture for audio time synchronization
This could solve the problem that you normally need more expensive hardware solution if you want to add multi-room audio to existing speakers, as once this is implemented fully you could have almost perfect multi-room audio syncronization using something like the Home Assistant Voice Preview Edition connecte to external speakers using its stereo output jack:
But a more relevant follow-up feature request for Music Assistant when this implemented would be if could add support for different types of multi-room audio, (to have options for single source-single zone, single source-multiple zone, or multiple source-multiple zone playback)?
Ongoing discussion about this new experimental Resonate audio component is going on in this Discord channel here:
Btw, looking at the commit history it seems like "Resonate" used to previously be refered to as "improv-audio" internally by its developers:
PS: Somewhat ironically the Open Home Foundation recenrly posted a newsletter blog post titiled "" and then they choose to use xkcd's "standards" classic XKCD comic strip on how standards proliferate as their tumbnail for the Resonate organization on GitHub, however with the Open Home Foundation, Home Assistant , Music Assistant, and Nabu Casa founder backing this they probably have the influence to at least convince many open-source based media layer implementations to also add support for this new protocol:
All reactions