I have just put the finishing touches on a project that I am quite proud of. The item in question is an audio streamer based on a Raspberry Pi that is optimised for sound quality. I know this has been done by others but I figure the more the merrier.
My design brief was to build a headless DLNA audio renderer that could be controlled from JRiver and play bit perfect audio at the best possible quality predominantly for headphone listening so minimal background noise and good signal to noise ratio were important factors.
One of the shortcomings of the Raspberry Pi as it stands is the audio performance. The standard analogue audio output can not be considered audiophile quality and, although I have not tried it myself, I am reliably informed that the HDMI audio is not great either. I also found connecting a USB DAC to be unreliable with occasional drop-outs and clicks etc. Therefore I decided to go for an I2S DAC which connects directly to connector P5 on the Pi which as it stands does not have a header soldered on the board so the first thing I had to do was to fit a two row by four pin header to this location. The benefit of the I2S interface is that there is very little CPU overhead required to drive it which is in contrast to a USB connected DAC. Basically the digital audio data is just decoded by the Pi and then the data is serially clocked out over the I2S data line into the DAC. Add to this the fact that there is no local GUI means that there is very low CPU overhead which means it can dedicate it's time to decoding the audio.
So firstly here is the finished device:
The case used for the project is the Power Cool Q6 Mini ITX case which is the perfect size measuring 200mm wide by 225mm deep by 55mm high. The case comes with an external brick type 12v 5A power supply and there is a switching regulator inside the case to generate the normal ITX motherboard voltages. However, I decided to do away with this power arrangement and instead put in a conventional analogue power supply consisting of a toroidal transformer with a dual 9v 30VA sedcondary which then feeds a variable analogue voltage regulator. The reason I went for a variable regulator instead of a fixed 5v one is that I find the Raspberry Pi is much more stable if the voltage is set at about 5.15v especially if a USB WiFi adapter is used.
The front power switch functionality is controlled by the excellent ATXRasPi unit (
http://lowpowerlab.com/atxraspi/). This is a smart power controller which allows you to have an external shutdown/reboot button to safely shutdown the Raspberry Pi without needing to login and issue a shutdown or reboot command.
Here is a youtube video showing it's capabilities:
https://www.youtube.com/watch?v=w4vSTq2WhN8Here is the inside of my completed streamer with everything wired up:
I started of using an ESS9023 DAC which sounded great but had two problems. Firstly, it would cut off the first 0.4 seconds of the first song in a play list. This wasn't a problem in the vast majority of cases because generally there is a silent lead in but if a song didn't have silence at the beginning then you lost the first 0.4 seconds which was very noticeable. This can be seen in the following picture which shows the audio file being played compared to the output from the DAC. The top two traces are the original flac file and the bottom two traces are the output from the DAC.
As can be seen the audio file itself only has 0.2s of silence at the beginning but the output of the DAC has 0.4s of silence and so cuts off the beginning of the track. I could find no way around this and after discussing it with the software developer we decided it was probably the muting circuit in the DAC chip that was being a bit slow to unmute. The other problem with the ESS9023 DAC was that there was a fair amount of background noise which, although would not be noticeable if listening with speakers, it was very noticeable through headphones. Therefore another DAC had to be found.
I eventually settled on the HiFiBerry DAC (
https://www.hifiberry.com/dac/) which uses the Burr Brown PCM5102 DAC chip. The board itself sits directly on the Raspberry Pi board so there are no wires to connect the two together which makes for a much neater arrangement. The performance of this board is excellent with no noticeable background noise and no cutting off the start of the songs.
With regards to the software there were three choices:
Volumio:
https://volumio.org/RuneAudio:
http://www.runeaudio.com/Pi MusicBox:
http://www.woutervanwijk.nl/pimusicbox/All three choices offer basically the same functionality so it comes down to personal preference. I have tried all three and quickly dismissed Pi MusicBox just because I didn't like the Web GUI layout. I am currently flitting between Volumio and RuneAudio because I find Volumio to be very stable and performs flawlessly but I'm not so keen on the Web GUI. RuneAudio on the other hand seems to be a little flakey and dissapears from the zone list in JRiver quite frequently. However I prefer the Web GUI on RuneAudio so once the stability is sorted out I will probably go with RuneAudio but for the time being I'm using Volumio as the every day system.
I can control the device from Gizmo or JRemote on my Android tablet or phone and enjoy bitperfect playback of my FLAC files including 24bit 192Khz files.
That's pretty much it really. The system sound great and also looks good sitting next to my Little Dot MKIII headphone amp:
Post editted 10th December 2017 to replace broken Photobucket images.