Roon Active Crossover (or How Good is RAAT synchronisation)?

This might be a mad idea - please @support tell me if it is!

Playing around with the DSP options in 1.3 it occurred to me that it might be possible to use Roon as an active crossover by using 2 Roon endpoints with Raspberry Pis and App HATs (e.g. IQAudio or HiFiBerry)

On first RPi (left speaker):
A. Use DSP - Mix - on first endpoint so that L goes to both L&R
B. Add DSP Parametric Low Pass to L output and High Pass to R output
C. Connect L output of HAT to midwoofer and R output of HAT to tweeter

On second RPi (right speaker set A assigns R to both L&R outputs, B and C are the same.

The group the 2 RPi endpoints together.

Two questions:

  1. Is this possible - the bit I am not sure about is whethher A/B work i.e. if, in procedural eq, mix is done first and then 2 parametric eq added with one set to operate on L and the other on R do the 2 parametric eqs work, in effect, on the original L channel?
  2. If the concept is right (i.e. the answer to 1 is Yes) then is the synchronisation of RAAT devices good enough for this concept to work?
1 Like

(1) yes
(2) that’s not what it was designed for

RAAT is built for multi-room, not inter-channel, synchronization–mainly because in order to run on a ton of existing hardware platforms, we can’t depend on the hardware-level networking support required to make accuracy guarantees to that level.

I think you could get great results doing Digital-XO using a multi-channel interface driven from one endpoint, though. MiniDSP makes a USB one that works on Linux (one of our partners tested it out). There’s also an 8ch Pi HAT coming to market soon. HDMI might be an option too.

@DuckSoup what speaker design are you considering?

I had the same thoughts…in fact with the Allo Piano 2.1 such an option for 2+2 outputs might be doable too on a single hat.

I was interested on the basis of LinkwitzLab LXmini use. Which I have built using miniDSP 4x10 but I would love to try something keeping everything in the digital domain until the last moment. The miniDSP means I have to drop to 24/96 doing another round of a/d and d/a after the DAC

I was thinking maybe with the Allo VANA option or IQAudIO digi-AMP+ but I’m not sure as amp hats go if they have enough output for the mid bass for the LXmini

You can always try something like a motu 828 mk3 hybrid (i just got a cheap second hand one for my lx521’s), or an rme ufx.
I’ll get it going first with acourate convolver, but will for sure also try Roon, which i expect to work just great :slight_smile:

@brian I was considering the same idea as the original poster. Do you guys have any experience on what RAAT latency to expect in a fully wired ethernet network?

I read in the documentation that the RAAT guaranteed latency is 1ms. That is 1kHz audio wavelength of possible phase shift. To be somewhat phase correct, the crossover between the two PI’s should then be really high, and not realistic for a normal speaker.

However I am curious what I can expect (not guaranteed, of course) as latency in a wired, fully controlled network of say, 1gbit. If low enough, it might make the project possible.

1ms is a target for clock synchronization, not a guarantee for the worst-case difference between two playback points at any point in time. We run on way too large a variety of hardware to make hard guarantees, and drift compensation is a complicated topic–try to go too tight and you end up performing too many corrections and producing extra artifacts. Since multi-room is what we are shooting for, we are making tradeoffs that are not ideal for digital-XO type applications.

For this to work, you’d have to figure out a hardware solution for running both Pi’s off of the same master clock. After that, a lot of the problems will melt away, since that eliminates the complexities of drift correction completely. Once that’s out of the picture, we’re back to the clock synchronization accuracy alone–which should be very good over gig-e.

I don’t think I’d bother with this style of solution at all, but especially not without getting them running off of the same master clock. Were you to solve the master clock issue, you’d want to measure that in your actual system to get the real number, but I suspect the result would be much better than 1ms over a clean GigE network with both Pis plugged into the same switch.

I have some other ideas…

You might consider using the HDMI output from the Pi (*) into an AVR that can handle the PCM and turn that into 8 analog outputs or 8 channels of speaker wires. An inexpensive/used AVR from a few years ago could probably do that really well and for less money than buying something like a miniDSP UDAC-8 + separate amplifiers.

There’s also an 8ch HAT coming out soon. You could probably pair it with a couple of these.

(*) I’m not sure if anyone has gotten this working with Roon yet. I think it should be possible–we know that multichannel support works fine with other ALSA devices.


Thanks for that insight @brian I think you raise some very valid points.

One of the issues for HDMI AVR’s is that the outputs are often not treated equally in the AMP sections, and sometimes the DSP processing side is often difficult to remove from the path to have an unaltered stream passed out to either pre out or amps.

What are your thoughts for say 2.2 output cards like the Allo Piano 2.1 that has essentially 2 DACs on the same HAT … forgive me if I have that all wrong - is there some way to take advantage of that within the confines of the RPi setup and Roon? Of course this only gets to 2 active channels, but it might be enough for some.

I think the Allo Piano might only take in 2 channels, and then it has some processing stuff on it to do more. Maybe I’m wrong.

Minidsp makes a product that takes HDMI in and gives you 8 analog outs…but I think it goes through a 96kHz phase in there where you can do some processing. And it’s more expensive than just buying their 8ch USB DAC. And at that point, you may as well just do the digital XO in one of their other products…hm.

The RPI’s I2S bandwidth is fairly limited. 384kHz x 2ch. It might be possible to get something going with this by wiring up the I2S manually–since it’s not a HAT. I’ve been wanting to play with their stuff for a while, but no idea if it’s any good.

There is an ASP (all analogue) 4 channel crossover now for the Linkwitz LX521.4 that many are looking at, to get out of the miniDSP and other DSP situation of a-d-a again so some are trying to keep this in the digital domain as much as is possible - hence the interest in the DSP options now available in 1.3 … I guess as time goes by the capabilities of external DSP will get past the 24/96 limits and we might not have to worry about it in 2-3 years time. In the mean time its fun to try and stretch the boundaries of the current infrastructure.

I’m not that interested in external DSP, even if it gets there. It’s always limited compared to what you can do on a computer (or if not, it’s more expensive than the computer).

1 Like

@brian thank you for your quick response, and suggestions!

You suggested that if I get the master clocks linked, it could work. However while that means that during playback the PI’s are in sync, how do they start in sync?

I can imagine the below happening:

  1. user presses play for a song in Roon interface
  2. Roon server tells PI roon bridges to start pulling data
  3. PI1 and PI2 both start pulling data and play
  4. PI1 and PI2 both get data, but transfer lag means at slightly different moments
  5. PI1 and PI2 both start playing, but at slightly different offset in the music
  6. linked master clocks makes sure that PI1 and PI2 both stay exactly at that same offset…

I looked at the solutions like the Piano 2.1 and 8ch HAT, however for my case they are not usable, since I need at least for the mid/high channel a digital out (I2S or SPDIF) for a quality DAC. Perhaps it is possible to tap the after-DSP output of the Piano 2.1 as I2S?

RAAT already manages synchronized starts, and over Gig-E they should be pretty good–the start procedure is much different than the one you imagine. Data gets buffered up first, then RAAT performs clock synchronization, then it instructs each device exactly when to start the stream.

Thanks @brian that is really interesting, especially the clock synchronisation part!

Just FYI

I was playing some RAAT devices…Mac mini running bridge and RPi with volumio and bridge installed.

Everything ran fine at the start but after a few songs things started to slip out of sync. As this was in 2 areas of the house on different systems but effectively one long room it was very apparent when walking between the 2 areas - not more than about 8-10M apart

I was having a dinner party and eneded up with just music in one area.

I’ll try it across 2 RPi setups at some stage too see if that helps.

Fascinating topic. I found this after doing this myself and thought to myself “I wonder if anyone else has tried this”?

I’m prototyping a speaker design (for my own consumption) and my analog active crossover hasn’t shown up yet (keeping this one analog - Marchand) so in the interim, I thought to throw together two Roon endpoints as a group and use DSP to create two crossover points, a simple LP and HP 36dB/oct.

So far so good, it’s working and keeping music in sync to the best of my awareness. Lots of moving pieces here so I’m sure it’s not perfect by any means.

To do this right one should use two identical endpoints with identical DAC’s so that their capabilities aren’t hindered by each other, as it is in my situation, but it’s tiding me over until my crossover shows up.


[Not relevant any more]

My idea was to run my woofers with a separate Pi and implement XO in Roon.

Some days ago I took two Pis running Roon Bridge. Bundled them in one zone. Send a square wave signal to both, attaching my old oscilliscope and was disappointed.

After each start of the track the time offset between the devices was different. Even worth the time offset drifts over time between the two units. This will cause phase and amplitude errors.

My conclusion: Time sync between zones is much too bad in Roon to be used for XO.

What is the solition? Either run RME digiface and attach some DACs to it but Toslink is not my favourite.

I decided to go with RME ADI-2 Pro FS R Black. Ist has a multichannel mode and two separate very good DACs ohne with XLR and one asym. at it‘s headphone outputs. Enough for my Woofers and Horns. If you need more you can connect two additional DACs.

I plan to include an other Roon Extension in this year that creates XOs for the Roon convolution engine.

So it has 4 independent / mono channels D to A?

Here the link to the manual and this is the schematic with in- and outputs:

This means: channel 1/2 and 3/4 have an included DAC channels 5/6 and 7/8 are connected to AES and S/PDIF so additional DACs can be attached.

The internal DACs are equivalent to the RME ADI-2 FS DAC which was tested very good on audioschiencereview RME ADI-2 FS Version 2 DAC and Headphone Amp Review | Audio Science Review (ASR) Forum

Yes but can they work as 4 mono channels? Or only as pair of stereo?