• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

FXRoute, browser-controlled Linux audio player and DSP control surface for mini PCs

Love this! Probably not for me atm

I agree that old PC's are better than Rasp Pi in a lot of cases. But I went with a rasp pi for my specific need - which is to playback to a USB Audio Interface. Pi in a case is smaller than the USB interface so practically invisible
Nothing wrong with the Raspberry Pi, but when it comes to size, the x86 side also has some nice offers, starting at around 72×72×44 mm with an Intel N97, 12 GB RAM and a 512 GB SSD, basically a complete system in that size.

Edit:
I haven’t tested FXRoute on Raspberry Pi OS Bookworm yet, so I’d treat it as untested for now.
That said, after looking at the requirements, Bookworm does seem to have the main building blocks FXRoute needs, so it feels like something that could work and is worth trying if the setup makes sense for it. I just don’t want to claim support without real hands-on validation, especially since I don’t have a Pi available right now.
 
Last edited:
FXRoute update: Bluetooth input, faster audio routing, and installer polish

I’ve been pushing FXRoute forward quite a bit lately, both on the audio side and on the setup side.

What’s new

Bluetooth input / receiver mode is now working in FXRoute
• You can stream audio into FXRoute from external Bluetooth devices.
• FXRoute now reports active Bluetooth session details, including device name, codec, and sample rate

Settings / routing

The Settings menu was introduced:
1777206015856.png

• audio input can now be configured
• audio output can now be configured
• Bluetooth input is now part of that broader routing workflow

That opens up a lot of interesting possibilities:

• using FXRoute as a compact Bluetooth receiver
• switching more quickly between app playback and external input
• routing different sources through the same DSP chain
• experimenting more easily with flexible desktop or mini-PC audio setups

Setup / install side

The installer also got more robust:

• optional helper features were improved
• background helper behavior was cleaned up
• install/uninstall behavior was tested on real systems and made safer


Recent real-host testing was done on:

• openSUSE Tumbleweed
• Ubuntu 24.04
• Fedora 43

Would be great if someone could give it a try on a Raspberry Pi running Bookworm and let me know how it goes.
 
Nothing wrong with the Raspberry Pi, but when it comes to size, the x86 side also has some nice offers, starting at around 72×72×44 mm with an Intel N97, 12 GB RAM and a 512 GB SSD, basically a complete system in that size.

Edit:
I haven’t tested FXRoute on Raspberry Pi OS Bookworm yet, so I’d treat it as untested for now.
That said, after looking at the requirements, Bookworm does seem to have the main building blocks FXRoute needs, so it feels like something that could work and is worth trying if the setup makes sense for it. I just don’t want to claim support without real hands-on validation, especially since I don’t have a Pi available right now.
The problem with Intel is the heat. If you want dead silent hardware, you can't even get a Pi 5 because it generates too much heat and needs a fan. Pi 4b is the sweet spot. I have a fanless case that is pretty much dead silent. Runs cool 24x7 because it has a stripped bare Linux and Shairplay and CamillaDSP installed using SSH.
 
Fanless is always the nicest solution if absolute silence is the goal.

But I also wouldn’t equate Intel with heat by default. Modern Intel N-series chips are built on much newer process nodes than the Raspberry Pi SoCs, and while ARM can be very efficient, the Pi hardware itself is not exactly cutting-edge anymore. Pi4 27nm, Pi5 16nm, Intel N150 7nm.
Having said all that, I’m still pretty sure I’ll buy a Pi 6 when it comes out.

That said, I wouldn’t say Intel automatically means heat or noise. I have two fanless x86 boxes here, one old one for FXRoute testing and one running Home Assistant, and even the small fan-cooled ones I’ve tried are effectively inaudible to me from 20 cm in a silent room.

My current N150 box also uses about 6 W, less than the Pi 5 + SSD setup I had before.

So I agree that a Pi 4B in a good passive case can be a very nice sweet spot for a stripped-down headless setup. I just think the small x86 boxes are also worth considering, especially for people who want a normal Linux desktop/base system and a bit more CPU headroom.
 
The problem with Intel is the heat. If you want dead silent hardware, you can't even get a Pi 5 because it generates too much heat and needs a fan. Pi 4b is the sweet spot. I have a fanless case that is pretty much dead silent. Runs cool 24x7 because it has a stripped bare Linux and Shairplay and CamillaDSP installed using SSH.
That's a poor generalisation. Take the Wyse 3030 and 3040 thin clients for example, both Intel powered and drawing 3W, less than the Pi 5 or even the 4. As for being fanless, you can do that with the right Pi case, even for the 5. Most thin clients are also fanless, and you can get fanless solutions for much more powerful PC kit if you're prepared to pay for it - see hdplex or streacom for example.
 
FXRoute is now at version 0.5.

A lot of small things changed again, but the main new bit is measurement directly in the browser plus a PEQ assist workflow. So you can measure, look at the curve, smooth/evaluate it a bit, and get to usable PEQ corrections faster.

Screenshot 2026-05-03 134240.png


I also tested ARM this time, specifically on a Khadas VIM1S. It’s obviously not a performance monster, wouldn’t throw 96 kHz plus multiple convolvers at it, but it works better than expected.
For a board that is roughly half as fast as a Pi 4 and pulls less than 3 watts from the wall, it’s honestly pretty decent, 44/48khz is no prob with a convolver and some less complex filters.

Release is here:
https://github.com/CobbyCode/fxroute
GitHub
 
Last edited:
This is how it compares to REW.
Speaker Wharfedale Diamond 12.2.
No Filters.

FXRoute
1777962020383.png


REW
rew-measurement-comparison.png


Both set to 1/6 smoothing.
 
New feature: you can now select multiple saved measurements and merge them into a single averaged measurement.

This is useful when you take several sweeps around the same listening position and want a cleaner average curve instead of relying on one measurement. The original measurements stay unchanged; FXRoute creates a new merged measurement that can be viewed, used, or deleted separately.
 
FXRoute 0.6.0 is out now, and the big new feature is the integrated measurement-to-convolver workflow.

You can take saved room/speaker measurements, generate correction filters directly in the browser, and export them as EasyEffects-ready convolver presets. Both linear-phase and minimum-phase FIR options are available, so it is easy to compare what works better in a real listening setup.

The first results turned out really good. I let it correct up to 3 kHz and was honestly surprised by how natural and clean it sounds. The bass in particular became noticeably tighter and more controlled, without sounding artificial or overprocessed. The before/after measurements also look very promising.

MLP
before-after-r.png

I were careful to keep the correction conservative and avoid overly aggressive filtering.

settings.png
 

Attachments

  • before-after-l.png
    before-after-l.png
    411.3 KB · Views: 32
Fantastic.

For me, the EasyEffects wrangling - DSP related features, DRC, speaker EQ, bass management etc

should be modular, and usable without needing to use the player / render side of the package

"Modularised DSP"
 
Last edited:
Fantastic.

For me, the EasyEffects wrangling - DSP related features, DRC, speaker EQ, bass management etc

should be modular, and usable without needing to use the player / render side of the package
FXRoute has a DSP mode in the settings, so the player/render side does not have to be the main focus. In that mode it can be used more as a control layer for PipeWire/EasyEffects.

As long as the signal is routed through PipeWire/EasyEffects, the source can be almost anything Linux exposes as audio: sound card inputs, USB audio, SPDIF/TOSLINK, Bluetooth, AirPlay receivers, Scream/network audio from another PC, browser audio, virtual sinks/loopbacks, etc.

So presets, A/B compare, PEQ, convolver, limiter/headroom and measurement assist are not meant to be tied only to the built-in player.

Btw. it works on Armbian, so Raspi should be covered.
 
Last edited:
Squeezelite could run on the FXRoute machine as an LMS/Squeezebox client and output to PulseAudio/PipeWire, so FXRoute can process it through EasyEffects like other Linux audio sources.
 
How about pipewire between boxen? Say the convolver is running on a powerful but too noisy server (also backup NAS) out in the garage,

renderer is an RPI unit with the audio rack, playback UX / controller on Android.
 
How about pipewire between boxen? Say the convolver is running on a powerful but too noisy server (also backup NAS) out in the garage,

renderer is an RPI unit with the audio rack, playback UX / controller on Android.
PipeWire can do network audio between Linux machines. It is not really FXRoute-specific; it is more a Linux/PipeWire feature. PipeWire has RTP sender/receiver modules, and the RTP session module can announce sessions over mDNS/Avahi so other machines can see them on the network.
While, the Raspi would be powerful enough for the convolver on its own likely.
 
I would use an ad-hoc MLP volume control with a solid Loudness Contour e.g. Schiit's Eitr 2

which also has ad-hoc balance and tone controls, three different digital outputs for "meta A/B" testing.

An analog-only preamp is another alternative.


...

DSP mode ... as a control layer for PipeWire/EasyEffects

As long as the signal is routed through PipeWire/EasyEffects, the source can be almost anything...

Wiim Ultra outputs USB preamp signal (after its own limited DSPing) and can act as a Squeezelite render node controlled by Material Skin on my phone.

If mono subs, its handling the bandpass / crossovers, phase / delay if needed might be enough.

Also has decent PEQ and RoomFit, worth a try!

This leaves maximum taps for FXRoute's handling of any linear-phase and minimum-phase FIR filters needed.

...

I might break up my Front L/R pairs into three actively xover'd boxen - after FXRoute is done processing, the front "whole stereo"* signal can be pipeWire-routed downstream correct?

Or again, maybe let that be done analog...

* less the mono "deepest trueSub" part maybe split off by Wiim

...

> it works on Armbian, so Raspi should be covered

even better!

Sanity checks feedback welcome
 
I would use an ad-hoc MLP volume control with a solid Loudness Contour e.g. Schiit's Eitr 2

which also has ad-hoc balance and tone controls, three different digital outputs for "meta A/B" testing.

An analog-only preamp is another alternative.


...
Yes, that should work in principle.

If the device outputs SPDIF, it could feed FXRoute through a USB-SPDIF input interface. Then the SPDIF input appears as a normal Linux/PipeWire audio source, and FXRoute can process it in DSP mode.


Wiim Ultra outputs USB preamp signal (after its own limited DSPing) and can act as a Squeezelite render node controlled by Material Skin on my phone.

If mono subs, its handling the bandpass / crossovers, phase / delay if needed might be enough.

Also has decent PEQ and RoomFit, worth a try!

This leaves maximum taps for FXRoute's handling of any linear-phase and minimum-phase FIR filters needed.
Maybe:
- FXRoute
- WiiM Ultra / WiiM Amp
- mains + sub

That way FXRoute does the main stereo DSP first: PEQ, convolver, loudness, A/B presets, FIR filters, limiter/headroom etc.

Then the WiiM can handle the practical subwoofer side: sub-out, crossover, phase/delay and level.

That makes more sense than putting the WiiM before FXRoute if FXRoute is meant to be the main DSP layer.

I also would not worry too much about CPU power here. A modern mini PC has plenty of headroom, and even a Raspberry Pi 5 should be able to handle the kind of filtering we are talking about.

I might break up my Front L/R pairs into three actively xover'd boxen - after FXRoute is done processing, the front "whole stereo"* signal can be pipeWire-routed downstream correct?

Or again, maybe let that be done analog...

* less the mono "deepest trueSub" part maybe split off by Wiim

Yes, in principle.

After FXRoute/EasyEffects has processed the stereo signal, it is still just audio inside PipeWire, so it can be routed further downstream wherever the system allows: DAC, multichannel interface, another DSP stage, CamillaDSP, hardware crossover, etc.

I have personally used FXRoute mainly as a stereo DSP layer so far, going straight into a DAC. There is not much built-in active crossover management in FXRoute at the moment, i might do some in that regard at some point.

But because it sits on PipeWire, the processed signal does not have to stop there. You could split or route it further afterwards. Maybe code could be optimized for that when we know the problems.
> it works on Armbian, so Raspi should be covered

even better!

Sanity checks feedback welcome
If it does it on a Khadas a Raspi should do too i say.
 
i've just installed it on Fedora 42 workstation. installation was pretty straight forward, i had most the required packages installed beforehand.
it defaulted to my home Music directory (which is fine i guess) but I would suggest you add a prompt for default music installation folder during install.
changed the .env file to my mounted NAS music folder which holds about 62k audio files and restarted the service. and waited..that's when i figured that was probably a mistake as it would take an hour if the app scans for tags etc. stopped the process and changed it to a single folder with holds 318 files. now the web page loaded in no time but I was surprised all the files were in a big mess of a list , and not divided to folders .
anyway I'm having hard time visually with the big spotify tab in the middle as I seriously despise this company
 
Last edited:
The user volume level control must be the same device that has automatically variable Loudness contour, ad-hoc tone control & balance are minor, but likely same UI as volume/LC, I'm not currently considering FXroute (nor Wiiim Ultra) for that cluster of functions.

As stated, I'm so far thinking Eitr 2 (USB in, SPDIF out) + Schiit Forkbeard (also other possible preamp choices see above) - if analog can use PocketADC into FXRoute.

...

Maybe:
- FXRoute
- WiiM Ultra / WiiM Amp
- mains + sub

The Wiim Ultra is not just one music source device (e.g squeezelite renderer), it also acts as THE central switcher / hub for ALL sources, including analog ones like OG FM, TT, etc

Qobuz etc, TV HDMI for watching films, kids phones via BT & a mini for Airplay etc etc.

This requires that the Wiim Ultra be upstream of FXroute.

But regardless, FXroute remains "the main" DSP, it is after all the only one with taps, the only real convolver of externally created FIR filters.

I want fanless and am on a tight budget so RPi4b much better than RPi5.

I'm not fussed about FXroute handling the multichannel / BM / crossovers domain; I see that handled with EasyEffects filtering and especially PipeWire, splitting / routing downstream of FXroute.

I am **really** interested in FXroute as the control layer helping me gain entry into that domain, plus the A/B presets for iterative testing / validation, the new combining / merging functions...

...

> I have personally used FXRoute mainly as a stereo DSP layer so far

Yes in that way I see it as complementary to OCA's GSonic Reference approach, which I want to try for DRC filter creation

> There is not much built-in active crossover management in FXRoute

Just speculating, but multiple cheap FXRoute RPi units (one per pair) in multichannel could handle bandpassing right? Not actually crossovers, would need to be blended manually...

Look at delays per driver / FIR phase-correction time domain tuning

At a later stage take advantage of PipeWire's pseudo realtime PTP "network clock sync", wrangling clock drift across the separate RPi units,

so many exciting toolsets for "Modularised DSP ™ " there!
 
I want fanless and am on a tight budget so RPi4b much better than RPi5.
Look at used thin clients as I mentioned up thread. They're usually fanless and cheaper than a Pi 4 or 5, even before you add the case/heatsink you'll need on the Pi. Probably the only definitive advantage of the Pi here is USB gadget mode which would let the Wiim see it as a USB DAC.
I'm not fussed about FXroute handling the multichannel / BM / crossovers domain; I see that handled with EasyEffects filtering and especially PipeWire, splitting / routing downstream of FXroute.
Last I looked EasyEffects was stereo only, so anything multichannel would have to be in PipeWire downstream of EasyEffects or possibly in parallel with it. A couple of places where this has come up:
https://github.com/wwmm/easyeffects/discussions/2860
https://github.com/wwmm/easyeffects/issues/2783
 
Hence in #35

> Or again, maybe let that be done analog...

and more recently

> multiple cheap FXRoute RPi units (one per pair) in multichannel could handle bandpassing right? Not actually crossovers, would need to be blended manually...

> Look at delays per driver / FIR phase-correction time domain tuning

Another option might be offload to DSPi
 
Back
Top Bottom