Having owned a Raspberry Pi for a few months, I’ve found the experience really refreshing.  Despite the limited processing power, the ability to have a silent digital source playing in our front room, with excellent audio quality, has brought our enjoyment of digital audio sources right up there with our vinyl playback.  We now have the choice to live with the absolute technical superiority that digital can offer, or the character of vinyl.

Essentially we’re now in a place where we can judge that well-recorded (and mastered) digital recordings *can* exceed the perceived quality of vinyl in many cases.

It’s not been an easy task to get it there though.  Our chosen USB audio interface, the EMU 0202 USB, sounds remarkably good at all supported clock rates given its original selling price, but really shines when playing at 192KHz 24-bit.  This remains the case even with content originally mastered at 44.1KHz 16-bit.  There are two likely reasons for this; firstly increasing the sample rate takes the reconstruction filtering further outside the audible frequency range, giving a cleaner sound (Assuming jitter and other distortions are low enough to not introduce their own issues).  Secondly, digital volume control simply retains more information when working in the 24-bit domain than the 16-bit domain.  No, it’s not “bit-perfect” – but show me a real-world situation that is outside of a laboratory or computer simulation, then we’ll talk.

Optimising the Pi for playback

I need to be fair here and point out that the vast majority of the tweaking has been done as part of the Volumio project development.  I get to enjoy the overall benefits and tweak things to suit our system and tastes. Must find their donations page at some point!

I’m now running Volumio 1.4 (still marked as BETA) on our Pi Model B, which brings some speed improvements.  So far as i can tell, it also fixes many of the USB issues that I was experiencing with v1.2 and earlier, so playback at all supported samplerates now works without pops and clicks, so long as CPU usage is kept under control.

CPU usage

In the earliest days of my Pi ownership, I did perhaps find myself a little disappointed with the limited CPU power of the Pi.  But then what the heck did I expect for so little money and power?  Anyways, some research told me I could overclock the unit to get some more headroom.  And that’s where I had been running, but I was still having problems with upsampling beyond 88.2KHz 24-bit.  So I got a little more serious.  I did some playing with the software config, and noting that I was voiding the warranty on an effectively disposable machine, I decided to try over-volting alongside the overclock.  The result has been nothing short of stunning.  I’m now running with the following lines in my /boot/config.txt file:
gpu_mem=16
hdmi_drive=2
force_turbo=1
over_voltage=8
arm_freq=1100
core_freq=500
gpu_freq=250
sdram_frequency=450
That’s a pretty extreme jump from factory defaults, and the processing stats show it.  I’ve not run any measurable benchmarks, but I have noted the following:
  • My previous mild-overclock settings could manage very listenable audio at 192KHz/24-bit rate without audible clicks, with better sound quality than upsampling to “only” 88.2KHz 24-bit. CPU usage sits at around 65% in the new mode compared with 95% with the previous mild overclock.
  • The Web-GUI speed is much improved.
  • The massive jump in overclocking gives much-improved definition, especially in terms of dynamics and timing.  There are also notable improvements in the stereo image, and finer tonal details exposed.
  • I should note that ABX testing is not possible in our rig, so confirmation bias *could* be at play.
  • The benefits were maximised when playing with the “Kernel profile” sound quality tweaks, available in Volumio’s “System” menu.  I’ve settled on the Buscia profile, both because it sounds perceivably better, but also because it seems to bring the CPU load average down significantly when the same work is being done.
  • I had hoped to be able to free up enough power to use the something better than the “Fastest Sinc Interpolator” resampling algorithm, but as yet I’ve not been able to do so as the audio gets too choppy to listen to.  I suspect I’ve found the upper limit of what this setup is capable of, unless someone can refactor the code such that all that processing can be carried out by such a low-powered machine.

Summing up

Much of the value of this exercise is in the tweaking. And that’s really rewarding as it’s a whole new skill-set learned virtually free of charge. The improvements are significant, even if only to my own perception. It’s been a lot of fun getting this far with such cheap and cheerful kit. So now I aim to leave it all alone and just enjoy the music, until I can get around to fitting an LCD display, control interface and put it all into a nice custom case.