There’s quite a bit going on in the header image above, so let’s unpack it. In front of the cactus sits a Xiaomi Mi Box S (€52), sandwiched between a Schiit Modi 3 (US$99, not in use) and a low-profile doorstop weight. The Xiaomi is sending out two digital signals: a TOSLINK stream to the Chord Mojo (€437) and a USB stream to the Topping D10s DAC (€99), which sits beneath the taller doorstop weight and is handing off analogue audio to the Schiit Jotunheim headphone amplifier (with MM phono board, US$499). The headphones off to the side are the Dan Clark Ether2 (US$2200). The iPad in the foreground tells the Roon Core server (out of shot) what to stream to the Chromecast portion of the Xiaomi Mi Box S’s Android TV operating system.
My video coverage of the Xiaomi made the introductions on its functionality but also triggered some interesting questions. Let’s tackle those in FAQ format:
Do I have to keep a screen connected to the Xiaomi for it to receive and play Chromecast streams?
Yes. What you can’t see in the photo above is how the HDMI output of the Xiaomi is connected to a nearby LG short-throw projector. An active HDMI connection is essential to keeping the Mi Box S’s digital audio stream/s alive. BUT: if you think that hooking up a screen is an unnecessary inconvenience/expense, know that a €7 HDMI-emulating ghost plug will allow you to run the Mi Box S headlessly. A monitor, TV or projector isn’t essential but without it, you lose access to the Xiaomi device’s UI and the Android TV OS’s three key native apps: Spotify, Tidal and Plex.
And are those three native apps capable of gapless playback?
Yep. All of ’em.
But I thought you said Chromecast devices couldn’t play gaplessly?
You’re right. They can’t. But this isn’t Chromecast, these three apps run inside the Android TV operating system alongside the Chromecast code. And when we use a smartphone app to stream to that Chromecast code, it splices tiny gaps between songs. In other words, Chromecast playback is not gapless.
But why not?
The Chromecast code must stop playback of the ‘now playing’ track before it can start the playback of the next — and this doesn’t happen instantaneously.
What about Roon and Chromecast – so that’s not gapless either?
Roon is different. Instead of streaming each track separately – ending one and starting another – Roon lays each track end-to-end inside one continuous stream. Ergo, Roon playback over Chromecast is gapless.
Is there an Android TV OS app for Qobuz?
No at this time, no.
Is there an Android TV OS app for Roon?
Can’t I just sideload the Android version of Roon Remote and/or Qobuz ?
You could. But it probably won’t display or function properly. Android and Android TV are different operating systems. They each run their own set of apps installed from different Google Play stores. A smartphone’s Android app is designed for touchscreens; touching an active area on the screen – an album coverer or the ‘play’ button – causes something to happen. Android TV app developers must delineate their app’s active areas into tiles which users navigate with a remote wand’s four cursor keys and a ‘select’ button.
So if want to stream Qobuz gaplessly, we have to do it via Roon over Chromecast?
Great! Hi-res all the way, baby!
Woah! Not so fast. Roon’s Signal Path panel tells us about some fairly tight restrictions laid down by the Xiaomi’s Chromecast code: Roon downsamples all 192kHz and 96kHz content to 48kHz before streaming it to the Mi Box S; Roon downsamples all 88.2kHz content to 44.1kHz. And yet Roon doesn’t touch 44.1kHz and 48kHz content — it is streames as is. Roon is effectively telling us that the Xiaomi’s Chromecast input will accept only 44.1kHz and 48kHz streams.
What about Tidal’s MQA? That streams either at 44.1kHz and 48kHz before being unfolded by the DAC — surely that’s a go-er?
Nope. Sorry. And to learn why not our attention turns to the Xiaomi’s two digital outputs. Hooked up via USB, the Topping DAC’s orange display never deviates from 96kHz, effectively telling us that no matter what we stream into (or on) the Mi Box S, its Android TV OS code will upsample all USB output data to 96kHz prior to dispatch. Reporting on the Xiaomi’s TOSLINK output, the Chord Mojo’s sample rate light never changes: it’s always orange (48kHz). That means the Xiaomi’s TOSLINK output is locked to 48kHz. Again, more upsampling and a second farewell to MQA and its bit-perfect pre-requisite.
Can’t I just install UAPP to get around Android’s upsampling like I do with my smartphone?
Nope. Remember how the Xiaomi streamer runs Android TV OS, not Android for smartphones? And remember how Android TV OS talks to a different Google Play Store. Just like Roon and Qobuz, there is no version of UAPP for Android TV OS.
What about if I stream MQA over Roon — won’t that let me play hi-res audio via the Mi Box S?
Whatever audio data is sent into the Xiaomi, the USB output stream will always be upsampled to 96kHz and the TOSLINK to 48kHz.
Does this lack of bit-perfect playback negatively affect the sound quality of 44.1kHz and/or 48kHz streams?
I’ll answer this question with a question: how can we know when we can’t get defeat or sidestep the Android TV upsampling mode?
OK, so how does the Mi Box S2’s digital output stack up against the now-discontinued Google Chromecast Audio’s digital output?
I was never a huge fan of the GCA’s TOSLINK output. Judged from an uber high-end audio perspective, it sounded a bit flat and lifeless in a decently resolving system, especially when heard next to the likes of the (admittedly far more costly) AURALiC Aries Mini. Adding a S/PDIF re-clocker to the GCA’s TOSLINK output brought forth a decent improvement to the sound quality’s overall avidity but with a total cost of ownership north of US$300, it could still be bettered by a S/PDIF HATted Raspberry Pi.
However, looking at it another way, the GCA’s TOSLINK sounded no worse than a Sonos Connect’s, which perversely made it somewhat of a streaming bargain. It’s hard to complain about a US$35 dongle but the GCA’s lack of gapless playback ensured that I would never use it for streaming. But when Roon turned the GCA into a gapless-capable endpoint in 2018, I was forced to reconsider this hardline stance; I added it to the back of the KEF LSX, tapping the primary loudspeaker’s USB port for GCA power.
Just like the GCA, the Xiaomi streamer’s digital output will still get found out in a high-end audio system, its TOSLINK output still lacks the transient ‘air’ bite of the Bluesound Node 2i and adding a S/PDIF re-clocker will still see it bested by a S/PDIF HATted Raspberry Pi. Not even the Topping DAC working the USB output to convert it to S/PDIF can match the ALLO DigiOne’s audible prowess. Where the Xiaomi steps ahead of its rivals is on visuals, on ease of use and on wide-reaching streaming functionality. For music (and video), it’s a stone-cold bargain. The Mi Box S makes it so easy to play music in a multitude of ways and makes doing so such a visual feast that only the most churlish of audiophiles would grumble. And those would-be negative Nancies are reminded that this kind of super affordable network streamer will bring more new people into the world of high-performance audio than it will repel existing audiophiles turning their noses up at a lack of bit-perfect playback or hi-res capabilities.
Further information: Xiaomi