If you have a recipe for verifying lossless/bit-perfect RAAT streaming before or after the audio signal reaches a DAC, please share. I’ve tried and not been successful.
I’m attempting to do this on the cheap with the tools I have available. What I don’t have is a professional audio analyzer like the APx555 nor an easy way to save digital data to computer via coax, toslink, or USB (e.g., DAC output to laptop).
I do have a Macbook that is a Roon endpoint/client and with it, I hoped to see if hi-res audio files from Qobuz are identical based on the transport method:
FLAC file downloaded from Qobuz (reference file that methods 2 and 3 are compared against)
FLAC file streamed from Qobuz in web browser (to replicate Qobuz Connect)
FLAC file streamed from Roon Core/Server
Here are the settings for Roon streaming from server to client.
I understand that the Roon endpoint should control the laptop’s output with exclusive mode, but the limitations of the Mac OS (correct me if I’m wrong) led me to use the Blackhole loopback virtual device to record the streamed audio with Audacity.
Qobuz downloaded FLAC and streamed FLAC via web browser are identical. The 3rd panel at the bottom of Audacity is black because there are no differences between tracks 1 and 2 to visualize as a spectrogram.
Qobuz downloaded FLAC and streamed FLAC via Roon RAAT are different. The 3rd panel includes waveforms for left and right channels, with barely a visible difference. However, the spectrogram shows that tracks 1 and 2 are not identical.
There’s plenty to critique with my methodology and Roon setup, but I’m keen to learn what to correct to start comparing RAAT streaming with the competition.
What am I doing wrong or what’s a better way to do this?
mjw
(Father! Father! Resist not! Let us destroy the core! Set us free!)
2
Well, that’s likely because you are passing everything streamed via Roon through the OS mixer!
That’s right @mjw in order to get around the Mac OS limitation/inability to directly capture audio from hardware. With streaming via web browser, it too is being passed through the OS mixer.
I would understand if both methods (Qobuz → web browser and Qobuz → Roon) produced output that differs from the original file on disk. Did I just get lucky the first time with web browser streaming and the OS mixer, and I might get different results if I tried it 5 times? Hmmm…
The problem might be the tools I’m using: Mac OS and virtual devices to record PCM data.
Both the BlacklHole virtual device and Audacity are set to 32 bit depth. As with my reply to mjw above, the results should be the same for Qobuz → web browser → Core Audio and Qobuz → Roon → Core Audio, but they’re not.
In most cases, Core Audio is fine, but it does have limitations with automatically changing bit and sampling rates. Apple Music is a well known case where Core Audio and the MIDI controls cause force downsampling or upsampling regardless of what the original audio stream was from the publisher.
You’re pointing at the hardware/software limitations of Mac OS and I would agree with you. I may give up on the approach I’ve taken and look for direct hardware capture or trying with a laptop running windows and/or linux.
Have you tried using an external DAC or something other than the built in audio on the mac? Reason I say this is because all of my setups (endpoints) all show bit perfect playback if no other processing is involved.
Roon at its core was developed for bit perfect reproduction - but this will only playback this way if all elements in the chain are not touching the audio.
The green dot on your signal path shows there is an issue with the OS Mixer output - it is doing something to the signal path that is changing it from bit perfect.
@Sean_O yes Roon shows lossless audio when streamed to my digital transport and external DAC. I accept what it says on the tin. I’m a believer
I’m not experiencing technical difficulties nor expecting technical support. My goal in this exercise was to come up with a method to visualize and make it easier to explain how Roon RAAT is bit perfect transport. I may have missed the mark by posting in Roon Software Discussion, rather than Tinkering [edit: I switched the post to that forum category].
I can imagine the C code for RAAT is like a synchronized relay race, where the the music is never dropped, and the audio packets are always in their correct lanes. But how to provide a simple and quantitative explanation without technical jargon to to alleviate the subjective floundering typically seen in debates about sound quality from TIDAL/Qobuz Connect, JRiver, JPlay, Audirvana, etc?
Similarly, when folks claim that SQ is better after a software update, or there’s more “air” or “depth to the music” after migrating Roon to another computer, well…
I’m interested to learn how they arrived at their findings. A cursory search of the forum with “bit perfect” in the title didn’t turn up meaningful results. If it’s easy to share links to the posts you’re thinking of, it would be much appreciated.
The RME ADI-2 has downloadable test files that the unit will verify as bit perfect. Another member with that AD/DA confirmed RAAT is bit perfect and I wrote a bit flipper in C++ that flips a single bit in the RME files so we could test that the RME test was working correctly.
Here’s source code (requires AudioFile.h available from GitHub) and the original and corrupted files if you acquire a RME ADI-2 and want to test yourself:
@mjw you’re one liner was spot on: I can’t get around the limitations of Mac OS using a virtual audio device. Routing audio through the OS mixer is not a reliable method to verify bit perfect playback.
I had expected the same results: identical 100% of the time or different 100% of the time.
Did I just get lucky the first time with web browser streaming and the OS mixer, and I might get different results if I tried it 5 times? Hmmm…
What I saw was unexpected - results after 10 recordings produced different results. Sometimes the captured audio files are identical, but sometimes they’re not. Attempts to remove variables from bit depth, quantization error, dithering, phase shifts, and so on resulted in no improvement. Hair pulling madness lies this way
As an aside, I installed a trial version of Audirvana Studio to test with. I felt like one hand was tied behind my back trying to find and stream the Qobuz album I’ve been testing with. Seems fine for simple streaming but it’s not in the same league with Roon’s capabilities.