RaspberryPi/ConvoFS

Introduction

ConvoFS is a free (Open Source)  “convolving file system” for doing Digital Room Correction (“DRC”), resampling and other nifty things. Being a virtual file system, ConvoFS works by sitting in between your music collection and your media server/streamer, presenting music stored on a disk or NAS box as if had all been convolved, resampled, etc. ConvoFS performs those operations on request without modifying your music collection or storing another, separate copy of it.

The far easiest way to run ConvoFS is by installing a package on a Synology NAS box. This has to be an Intel-based ‘+‘ model but,  unfortunately, they are relatively expensive.

However, with some effort, you can obtain most of the functionality with cheaper Raspberry Pi hardware, and additional software that will not necessarily cost you extra. If you are a die-hard Open Source purist, stop reading further now, because we’ll make use of non open source software such as Minim Server and Lumin app below.

If you want to use ConvoFS for room correction and not just for resampling/LoCo, you will also need to generate filters for the purpose and upload them to ConvoFS.
You can do this by using products like:

  • Acourate (commercial)
  • AudioLense (commercial)
  • REW/Rephase
  • DRC FIR

What you need

If you have a hardware, standalone streamer, be it a Linn/Lumin/AURALiC etc., you need just one Pi3, as the streamer will take the role of the Volumio/Rune Audio box used below. But to demonstrate an all-Pi setup, I will describe how to use a second Pi3 as replacement for a stand-alone streamer.

In the setup I’ve tested, I use two Raspberry Pi3’s, installing ConvoFS + MinimServer on the first one. On the other one, I’ve installed Volumio or Rune Audio and attached my USB DAC. Also, you need an iPhone, iPad or an Android phone/tablet, installing the Lumin app on it. Note that while MinimServer & Volumio are free to download, the author/teams accept donations. If you’re satisfied with their products, you may consider donating.

I consistently specify Pi3’s. This is because that’s what I’ve used for testing. You may use other devices, especially for the Volumio server. If you use other hard/software for the MinimServer + ConvoFS server, the conclusions regarding performance at the end of the article may not be true and you may have to install java yourself.

I’m using cabled  networking. I’ve not tried using wifi on the Pi’s, as the outcome would be highly dependent on other factors such as the router used etc.

Let’s get going

In the following, we assume that you’ve installed the first Pi3 with Raspbian and the other with Volumio/Rune Aduio. If you buy the first Pi’s SD card with the NOOBS software preinstalled, installing Raspbian is straightforward.Below, I’ll assume that the hostname of the Pi is ‘ConvoPi’. Please substitute it with the proper name if you’ve chosen some other name. For installing Volumio/Rune Audio, refer to their respective web sites.

First, we’ll install ConvoFS and MinimServer on the Pi running Raspbian. You may do the following from the graphical console, or you may enable the ssh service on it, letting you access it from another PC/Laptop. If you own a Windows PC, you will then need to install the Putty SSH client on the PC. If you run Mac/Linux, there’s an ssh command is available in the command shell. Doing it from the console may prove to be the most straightforward approach. The following will assume that you’re doing this. If not, do an SSH connection to ‘ConvoPi.local’ , using either Putty or the ssh command.

ConvoFS installation:

  • Download ConvoFS to the Pi: go to http://www.convofs.net/Download/ and download the newest ConvoFS version 3 tar.gz file. Right now version 3 is in late alpha, approaching beta status. As long as this is the case, find the gz file in the 3.x-alpha subfolder.
  • Before you install ConvoFS, make your music collection available on your the Pi – either from a locally mounted USB disk or by NFS mounting your music from your  NAS box/Linux server. Either way, have the path name at hand, you will have to supply it below.
  • Install ConvoFS:
    • Below, substitute VERSION/BUILD with the build number you downloaded.
    • Run the command: tar -xzf  ConvoFS-VERSIONBUILD.gz
    • Run: cd ConvoFS-VERSION
    • Run: sudo apt-get update
    • Run: ./install-ConvoFS.sh
    • Follow the instructions, hitting return  a couple of times
    • ConvoFS will install the additional software it needs.
    • If everything went well, ConvoFS will now be running and startup automatically when your Pi restarts.

Install MinimServer

  • Download MinimServer: go to http://minimserver.com/downloads/ and download the version for Linux Arm – hard float.
  • Run: cd ~
  • Run: tar -xzf  MinimServer*gz 
  • Next, run: minimserver/bin/setup enable_autostart
  • And: sudo reboot
  • This will restart the Pi. Wait for it to come up.
  • Then direct your web browser to the MinimServer configuration page. The URL could be
  • Check that MinimServer is running (i.e. you don’t get an error page) and enter the text /ConvoFS/mount into the Content Directory field.
  • Click Update followed by Rescan.
  • Wait for MinimServer to index your music collection. The first time you do it, it may take quite some time, partly due to Minim’s internal database being empty, partly because ConvoFS will build internal data structures.
  • Whenever the Pi starts up, MinimServer will do a new but faster rescan of your music collection. To avoid this, download & install the ‘MinimWatch’ program from the MinimServer site. You should install it on the machine you normally use which may not be the Pi. Having installed it, run in and set the MinimServer advanced option ‘startupScan’ to false.

Check things

  • Run: sudo reboot
  • This will restart the Pi
  • Wait for it to come up and log in again.
  • Run:  ps -e | egrep ‘java|ConvoFS|nginx’
  • The output should be something like:

615 ? 00:00:00 ConvoFShelper
731 ? 00:00:36 java
1350 ? 00:17:51 ConvoFS-main
1484 ? 00:00:00 nginx
1485 ? 00:00:00 nginx

  • Check that the ConvoFS-main and java processes are present in the output. The java process is MinimServer.
  • NGINX is running the ConvoFS admin interface.

Configure Volumio/Rune Audio

  • Next, configure the music renderer Pi: direct your browser to  http://volumio.local/wizard or http://runeaudio.local/mpd/
  • (We’re assuming that you haven’t changed the default host names)
  • Configuring is basically ‘next-next-next…’. But of course, you should select your DAC. Do not configure a music source.

Configure ConvoFS

  • The ConvoFS administration interface is available at:
  • You are – as a Pi3 user – advised to go to the ‘Perform maintenance operations’ tab and change the three segment size variables to 10 seconds each. Remember to hit Submit.

Set up the Lumin App

  • Now, install the Lumin app on your iPhone/iPad/Android device and start it.
  • Hit the configuration button in the app and ‘pair’ the Volumio/Rune Audio device with MinimServer on ConvoPi.

Test the setup

  • Turn down the volume on your amplifier, and using the Lumin app as the controller, start playing a track from your collection. Turn up volume gradually when music hopefully starts to play (it may take a little while).
  • As you haven’t uploaded any filter yet, ConvoFS will just fall back to non-DRC processing, attenuating the music with some dBs.
  • Refer to the ConvoFS documentation for a lot more information. It is bundled with the installation and available at the admin URL.

FAQs

Why two Pi’s?

Well, one may be able do the job. That would require you to install ConvoFS and the packages it need within the Volumio/Rune Pi. It may be possible, but I use two for performance, stability, sound quality and easy setup reasons.

Why the MinimServer / Lumin app combo — Volumio/Rune Audio has their own nice interfaces?

True, but running ConvoFS with plain Volumio is – in my experience – giving dropouts in sound. Probably the intermittent blocking of read operations that ConvoFS causes, blocks Volumio itself. Haven’t done the test with Rune Audio. But both distributions ship with an installation of the MPD player. And MPD interfaces nicely with MinimServer and the Lumin App. So in fact, we only use Volumio/Rune Audio for setting up MPD and to have an easy way to install it. This is a little unfair to all the efforts, the project teams has put into the development, but to be honest, I prefer the interface set up in this article. The Lumin app takes a little while to master, but after that, it is nice.

Limitations/conclusion

The Pi3 is not the fastest computer on earth. You may be forcing ConvoFS to use more horsepower than is available on the Pi. The symptoms will be audio stuttering and dropouts.

I’ve tested the following setups:

  • Plain room correction (convolving) – no resampling, no LoCO, with sample rates up to 192 kHz: success
  • Convolving + LoCo + resampling to 176.4/192 kHz of 44.1 and 48 kHz FLAC files: success
  • Convolving + LoCo of 192 kHz: failure

But remembering the limitations, the setup described in this article, is quite useful.
There are other ways to do convolving/resampling with Pi-class hardware, but I believe that ConvoFS is among the more versatile. Furthermore, should you upgrade to a stand alone streamer, you can reuse the ConvoFS part of the setup.

Regarding gapless play-back (live-recordings): this will normally be the case _if_ the track files are alphabetically sorted, i.e ’01 first track.flac’, ’02 second track.flac’ etc. The reason why it matters is – again – the Pi’s limited power and the fact that ConvoFS does ‘convolve-ahead’ – processing the first 10 seconds of the predicted next track to jumpstart playback.

Finally, feel free to contact me regarding questions (especially about ConvoFS :)), problems, other feedback.