BETA Release 20260621

Time for another beta release.

And this one I’m rather excited about: the introduction of ‘convenience switching’!

One of the things that bothers me for a long time is the exclusive locking of an audio device. From a technical perspective its clear, but from a user perspective it can be rather annoying when you’re using multiple services.

This results in users sometimes not understanding why they can’t switch from HQPlayer to Roon (for example). Which often results in a reboot.

With the last release we introduced the audio status view, which gives you insight in which application has exclusive access to a particular audio device.

With this beta build you can now use multiple services and don’t need to care about this: just hit play on the particular service, and your RoPieee unit will take care of the rest: it will stop the current running service and hand over the access to the audio device!

Not all services provide the necessary hooks, but for now these services do: Roon, HQPlayer, Squeezelite, UPnP and Airplay. This means that with these services you can just switch between those, without the need to reboot or wait or anything. How cool is that? (I know, I’m pretty excited about it :wink: )

A few things: for both Roon and HQPlayer you need to take some action:

  • With Roon you need to explictely give the RoPieee Remote Extension also access to the source controls. You can find this in the ‘Device Setup’, where a ‘External source control’ option shows up. There you can connect a certain RoPieee Remote Control. It looks like this:

  • With HQPlayer you need to enable (once) the remote control access. A tiny, not so obvious button :wink: . It looks like this:

So, this needs extensive testing. And there are some ‘rough edges’ that I’m already on, but I wanted this out there so we can test test test.

With HQPlayer ‘hitting play’ isn’t enough: the first time this will take care of stopping the current running services, but it needs another hit on the play button to actually start it.

So go out and test and tell me what you think!

Regards Harry

6 Likes

Got a couple updating now, and as I use Roon, HQPlayer, UPNP and Squeezelite (and occasionally PlexAmp) that might come in useful. Not that I have had the issue very often

Hi @spockfish this is quite nice and just trying a couple of options out and it’s working nicely.

None of them seems to lock it when I pause the music and go back to idle, but I do remember that PlexAmp locked it a few times in the past.

Took me a while to find the Extensions showing up in Roon Extensions as I was looking in the Extension Manager for them

Keep in mind: Plexamp is not supported!

1 Like

I pretty much never use it for music, but do have it for that when everything else fails (which doesn’t happen).

This is a really nice new feature Harry :+1:

3 Likes

Yeah, I need to properly document it, because indeed this a little bit hidden in the Roon UI.

1 Like

Works great with Roon & HQPlayer on my Holo Red.

Thank’s a lot! :slightly_smiling_face:

very nice, will test

can you explain a bit more about what a service needs to support this (why some currently work and some don’t) ?

i won’t be able to get any changes into plexamp (it will not be supported going forward) … but its replacement caldera headless is in active development, if i knew what was needed for it to be controlled by this new ropieee feature, i could try to get it implemented

1 Like

What it basically need is some triggers that are fired on certain events. Most services implement this by adding the functionality to call external apps (which could be shell scripts), so the integrator is fully free in what to do.

The services differ, but mostly the logic is the same or comparable: an event just before starting to play, or at least just before the device is being locked. And an event when the service stops.

Furthermore, it needs some kind of interface to remote control it: RoPieee should be able to instruct it to stop playing remotely. Here you see a variety of means: from Mqtt, DBus (MPRIS), a textual socket interface (LMS) etc. In case of Plex I can imagine this means kicking up the remote control command to the server, like with LMS, Roon and HQPlayer.

Ideal behavior of the service, at least under ALSA, is that it does not fail upon not being able to open the device, but implement some kind of retry (ideally with a timeout).

Let me know, because I’m about to kick out the current Plexamp implementation. It is so cumbersome, and it’s lack of progress is blocking me more and more.

Now, wrt to the Caldera stuff: although it sounds interesting (with better technology than Plexamp), if it does not come available as a source package there’s no way I can include it in RoPieee. Just FYI.

Oh. I know see that Plexamp is abandoned completely :frowning:

correct, plexamp headless is no more (tho to clarify, plexamp mobile and desktop apps are still active)

no caldera source package that i’m aware of (so, likely a blocker for ropieee)

Then I’m going to remove it.

Yes, that’s a blocker.

1 Like

:+1:

RoPieee 2026.05 (3793) [BETA]
Hardware: Raspberry Pi 4 Model B Rev 1.4; 4GB RAM, 16GB disk
Network: wired ethernet
Audio: USB DAC (TEAC) — Roon RAAT, AirPlay2, Spotify Connect, Squeezelite
Display: no
Remote: Flirc — Roon RAAT only

The new convenience switching works wonderfully, thanks very much indeed Harry.

I am now able to switch back and forth between Roon/RAAT and Squeezelite; this never worked reliably before, often requiring a Ropieee reboot, but is now 100%. Excellent!

Airplay2 & Spotify Connect also good.

Only one issue: I had to manually select the audio device, for each service, as they had all reset to “off”. Once I set each one back to my DAC, and reconfigured, all worked fine.

Yeah… On my list. This logic requires some changes.

1 Like

Well, maybe not a hard blocker: i’ve played around with it, and it looks promising. At least it’s not written in js, and I’ve got it running on RoPieee. The biggest hurdle I see right now is the lack of hooks (being able to run a custom script), which prevents hooking this up into the convenience switching mechanism.

developer plans to add some hooks like what you described, hopefully will make it easier to work with

Let me know when it arrives so I can have another look.

1 Like