Last time, I talked about Roon and discussed my experience with it using the NUC as the primary installation and playback. No doubt, you are aware that many people will use inexpensive devices like the Raspberry Pi 3 to handle playback distributed around one's home... And no doubt you've also come across much hyping about more expensive, low power devices when for around $100 and a little know-how, you can get it done quickly, easily and sounding great.
First, I just wanted to practically lay out a simple way to install Roon Bridge on the Pi 3 that worked for me and using which I will run a few tests to demonstrate the sonic output. Remember that the network protocol from the Roon "Core" (my Windows computer) to the Roon "Bridge" (Pi 3) is what's called RAAT (Roon Advanced Audio Transport). It's a protocol with a number of benefits as highlighted in the link.
Note that I certainly do not profess to being a Linux guru. Much of the information here is gleaned from various discussions and forums; this set-up worked well for me and I hope provides a good starting point to get things running if you're going to try something similar.
I. Installing Roon Bridge (remember - tested with Roon Core 1.2, Bridge version 1.0, build 40 stable) on a clean Raspberry Pi 3:Converting my Raspberry Pi 3 + HiFiBerry DAC+ Pro as an efficient Roon Bridge device wasn't hard following a thread on installing DietPi here:
1. Go grab DietPi for your device - a small, "minimal" Debian core. I used the standard "DietPi_RPi-armv6 (Jessie).7z" file. I see there are versions for devices like the ODROID-C2 as well. Write the image with Win32DiskImager to a microSD card - almost anything will do, I had a 4GB lying around. Insert the microSD into the Raspberry Pi 3's SD slot and plug in the machine. I have my Pi 3 connected to the home network through the wired ethernet port.
2. After giving the Pi about 5 minutes to automatically set up swap partitions and get on the network, log into the machine remotely (like using PuTTY in Windows). You might need to go into your router to find out what the local IP is. For example:
|There it is!|
Pass = dietpi
Once you log in, you'll see that it's installing a bunch of packages from on-line sources. It then reboots and you log in again with PuTTY. You then can change some installation settings (I kept it at default for now). It reboots one last time.
3. Log into the Pi again, this time install ALSA Utils; we'll need this to manage the sound device:
$ apt-get install alsa-utils
4. Follow the Roon Bridge install instructions here and do this:
$ curl -O http://download.roonlabs.com/builds/roonbridge-installer-linuxarmv7hf.sh $ chmod +x roonbridge-installer-linuxarmv7hf.sh $ sudo ./roonbridge-installer-linuxarmv7hf.sh
The screen should look like this if successful:
5. Now finally, in order for the Bridge to work, an active audio device is needed. Install the audio card driver:
Change "none" to my soundcard, the HiFiBerry DAC+ (Pro).
After selecting this and maybe changing "Language/Regional Options" to make sure the timezone is correct, exit the config program, it'll reboot. After the reboot, your Roon Core server "Settings" should see the Raspberry Pi 3 as Roon Bridge:
6. Go enjoy you new all-in-one Roon streaming device with good internal DAC... Knowing that this is as "light weight" an installation as you're ever going to find (for those who believe this makes a difference in sound quality!).
II. Installing Roon Bridge on Raspberry Pi 3 for external USB DACNow, suppose you don't have a DAC HAT board like the HiFiBerry DAC+ Pro, you might want to stream to an external "plug-n-play" USB DAC that should be recognized by Linux... Here's what we can do.
After step 4 above, instead of going into the DietPi Config screen, let's have a look at what DAC ALSA is able to find (make sure the DAC is on and plugged into the Pi's USB port of course):
$ aplay -l
You see that I have the TEAC UD-501 connected and that this is "card 1" and "device 0" seen by ALSA. Let's now do a little manual system-wide configuration and change the default sound player to this "card".
$ nano /etc/asound.conf
Replace the lines so they reflect "card 1", and "device 0":
Now issue a "reboot" and when the machine restarts, you should see this in Roon. As usual, it can be activated and streamed to:
IV. Measurements...So, you must be wondering given that on the Internet, people say this and that about whether Roon sounds "better" than anything else, whether streaming off the Pi 3 changes anything.
Let's not belabor the point and just go for the 24/96 test signal.
A. Roon Bridge streaming to HiFiBerry DAC+ Pro HAT board:
First, let's have a look at streaming to an internal HiFiBerry DAC board. Here's the numerical summary:
Notice what I've done - it's a comparison of the Raspberry Pi 3 + HiFiBerry DAC+ Pro output using the 3 main ethernet audio protocols I have measured over the months - Roon Bridge here using RAAT, piCorePlayer for Logitech Media Server streaming using the venerable Squeezebox protocol, and Volumio for DLNA/UPnP streaming off JRiver. In the last column to the right, I also threw in the results when running off a simple 5V lithium ion battery and streaming with Volumio.
As you can see, there's nothing unusual going on at all between all these option - they're obviously all "bit-perfect". There is no significant difference in the noise floor; even with the lithium battery setup even though I know that my ADC system can measure below what I'm seeing here. Sure, there are slight differences as usual due to inter-test variation. Here are the composite graphs:
Pretty well a direct overlay of the results irrespective of which ethernet protocol was used to stream the digital data.
How about the time-domain and jitter? Here's what Roon Bridge looks like:
As you can see, the J-Test result looks beautiful. Remember, the HiFiBerry DAC+ Pro has separate oscillators for 44kHz (16-bit test) and 48kHz (24-bit test), connected to the Pi 3 mainboard by I2S. A small set of sidebands near the base of the 16-bit test appears occasionally (I captured it at its worst in that image), but otherwise, this is further evidence that jitter is typically not a problem these days (more noticeable if you're still using the old S/PDIF coaxial and TosLink interfaces).
B. Roon Bridge streaming to USB TEAC UD-501 DAC
For many folks, we'll likely be streaming through the USB port to an external DAC. Again, let's just look at 24/96 playback... Here's the summary with the TEAC UD-501 DAC plugged into the USB port of the Pi 3:
And the composite graphs:
As expected from the numerical analysis, there's no evidence of any significant noise or distortion difference between the ethernet protocols - Squeezebox, DLNA, or RAAT. Graphs essentially overlay and provide an objective demonstration of the "signature" for the DAC.
16 & 24-bit J-Tests:
What can I say, it's the typical J-Test FFT I see with the TEAC UD-501 DAC. No evidence of any significant jitter issue at all with asynchronous USB.
V. Conclusions...There you go folks. Setting up a "lean and mean" Raspberry Pi 3 Roon Bridge isn't too technically challenging plus can be done without much expense at all (around $50 with power supply and case, just add a good microSD card). It was completely stable for the week or so I left it on 24/7 with no issues whatsoever. From a functional perspective, Roon Bridge worked well. It's snappy, I've streamed 24/384 PCM with no issues (through the standard 100ms buffer size). Also no issues streaming DSD64 and DSD128 through the DoP protocol (DSD128 is the limit of the TEAC UD-501 DAC). However, as I mentioned last week, one significant disappointment for me is that Roon is not capable of handling DST-compressed DSD64. This is a limitation of the Roon Core 1.2 server used rather than an issue with the Bridge or RAAT.
From what I have seen during my evaluation, Roon Bridge doesn't need much computing power and an optimized DietPi install like this provides plenty of cycles left over with the Raspberry Pi 3. Here's what "htop" looks like while playing DSD128 audio to my TEAC UD-501 through USB in DoP format:
Only 16 threads active with the DietPi OS and Roon Bridge running, and only 13% CPU utilization (easily <10% CPU utilization with standard 16/44 to 24/96). If you're wondering, on a Windows PC, don't be surprised to see >1000 threads - not that this is going to make a difference so long as CPU cycles are adequate of course. Streaming PCM 24/384 increases the CPU utilization to ~17% for the Pi 3. No surprise then that even weaker CPU devices (like the microRendu) should be able to handle high samplerates. Note that compared to what I showed previously with piCorePlayer, the Roon Bridge appears to use a bit more CPU cycles (with piCorePlayer, a 24/384 stream only took about 5% at most).
As for the sound coming out of the Roon Bridge, it's good and I experienced no sonic difference worth writing about. Basically, the results show that the sound is exactly the same as when you're using the DLNA playback of Volumio, or piCorePlayer and streaming off Logitech Media Server. I trust that with all the evidence over the years, this presents as no surprise to anyone... Software differences and OS tweaks are essentially irrelevant for modern DAC playback with good buffering and asynchronous operation. The conversion between digital data to analogue signal will be as accurate as your DAC allows. Unless anyone can prove otherwise, it is what it is!
Having said that, if you want an even leaner DietPi / Roon Bridge as I installed above, by all means apply my CRAAP settings described previously in my "Raspberry Pi 3 as USB Audio Streamer" post a few weeks back by editing the config.txt file in the root directory of the DietPi/Roon Bridge microSD card after you've done all the set-up and know it works:
It'll run cooler, use less power; and of course sound "better" ostensibly due to lower jitter and noise :-).
Let's see... Nope, nothing much seems to be announced in the audiophile world this month. I guess after the December forth quarter consumer expenses and January CES announcements, we're in a bit of a lull. On the music front, I've been getting into Weyes Blood's Front Row Seat To Earth (2016), and Panda Bear's Person Pitch (2007).
Since it's Oscar night this Sunday, I've been catching up on the "best picture" nominees like Arrival, Hacksaw Ridge, Hell Or High Water, La La Land, Moonlight and Manchester By The Sea. Missing Fences, Hidden Figures and Lion as they're not out on Blu-Ray yet. Some good stuff there for sure... But like appreciation of music, it's all rather subjective isn't it? My favourites were either Hell Or High Water or Hacksaw Ridge for serious drama (doubt either would win given the buzz out there, kick ass Hell Or High Water soundtrack BTW), and since I like more serious sci-fi, Arrival was enjoyable as well (again, unlikely a "best picture" winner). La La Land as romantic fare was also very good; feel good without too much syrupy sweetness - I like musicals and this looks like the big winner à la Golden Globes.
Moonlight was OK, although I thought the pacing around the protagonist's struggles could have been more even. I really am puzzled by the Manchester nomination for "best picture of the year" though. Sure, there's pathos and humanity in there, but I just wasn't impressed by the story as a whole and am left scratching my head as to what made this the "best" film. Casey Affleck did a good job playing his depressed, mopey, predominately lethargic and tragic character (tragically also self-inflicted), but it just doesn't seem like a memorable performance to me.
Like I said, subjective... In the subjective world, it's as much a dance between what is and what the perceiver (viewer/listener) expects that forms the opinion shaped by experience, beliefs, and values. And like the Oscars, opinions can be found a dime a dozen and the value of opinions of experts can be highly variable for any of us.
Until next time... Hope you're all enjoying the music & movies.