--- author: email: mail@petermolnar.net image: https://petermolnar.net/favicon.jpg name: Peter Molnar url: https://petermolnar.net copies: [] lang: en published: '2023-11-11T04:45:00+00:00' summary: The year 2023 reminded me of my mortality quite a bit, so I took a good, deep look at my home setups in case someone else ever needs to be able to understand it, use it, maintain it. I decided to start with something that we use day to day - music and video playing. title: The quest for simple, hight quality music and video playback in 2023 --- ## About snowflake setups Many things in my setups work for me, it is not always user, let alone child friendly. Because I want to ensure I'm not the singular bus factor for the setup, I need to think of the following: - things need to be able to run on their own, long term - they need to be simple enough so any family members can use it, children included - someone with a baseline IT knowledge can learn how to maintain it - can't be a super-snowflake setup that's impossible to replace with something paid for, hosted, or bought This is not easy, and with the ongoing enshittification of everything[^1] it'll only get harder: new devices are cloud connected, they rely on streaming platforms which will, eventually, go bust, and in the meanwhile support for local media gets forgotten. Did you know Chromecast doesn't support DivX and old AVI formats natively[^2], so you can't cast these without transcoding? ## My journey with audio and video Over 10 years ago we moved to England and I left my "hifi" - a Panasonic SA-AK18 *which had a better service manual[^3] than any device I ever owned, despite falling into Black Plastic Crap category* - in Hungary as it was too large to fit first in a shared accommodation, then in a one bedroom rented flat. I had a jack - RCA cable connected to it which went in from my computer, and if I wanted to play music, I used either that connection, or CDs. Once we got here I still wanted music so I got two small Panasonic speakers for \~£20 and a cheap but hyped car amplifier, a Lepai LP-2020A, for a similar price from eBay, and continues the same connection to the laptop. *When I finally brought the old speakers to the UK I realised they sounded much better in my memories, then they actually did, and I wasted quite a lot of valuable space in the car boot with them. They ended up being donated to a charity.* Later I bought a Topping MX3[^4] all-in-one (DAC, headphone- and power amplifier) as an upgrade to overcome the issues with the Lepai (eg. terrible balance). The Topping, in it's category, is a marvel, and sounded incredible with those absurdly cheap speakers. At this point I had my home server connected to it, running MPD on the local music, but I was listening more and more to Spotify over headphones at work. Eventually I had a Raspberry Pi (see the addendums) running MPD[^5], and raspotify[^6] for Spotify Connect. Turn a few years: the pandemic and the lockdowns happened, we missed out on concerts and fun, and ended up buying a decent set of speakers, namely a pair of Dali Oberon 5[^7]s. I kept the Topping, because on paper, it had just enough power for the floorstanders, and foolishly didn't listen to the people in Richer Sounds that it won't. I adore these speakers, the bring out so many extras in songs I never noticed before, and I can only recommend them. Videos, in my childhoold were VHS tapes, later .avi files on the computer, and for many years, I simply connected the computer to the TV or the largest monitor in the house and watched them that way. When streaming started to pick up the lack of widevine on linux only allowed 480p on many platforms. This forced me to look into other possibilities: at first our pre-WebOS LG smart TV was adequete, but it soon got abandoned by providers, so we eventually got a Chromecast with Google TV[^8]. The TV can still receive DivX DLNA casts natively, and the Chromecast can do the rest, but it's fascinating to see how short lived a full era of early computer video had become due to licencing issues. ## When music quality kicks you in the teeth A little while ago we attended to a birthday celebration where the owner had a nicely sounding HiFi setup (B&W speakers, some way too expensive, class A amplifier, etc), playing some tunes in the background. One of those songs stood out with the clarity of the guitar[^9], so when I got home I decided to hear it on my setup. It wasn't entirely disappointing - knowing it costed minimum an order of magnitude less, it was pretty good -, but it was certainly lacking: those guitar strings lacked the same tingling in certain ranges. I did try if re-arranging would help: a tiny bit, but I can't afford that kind of repositioning with a whirlwind toddler around. And so I started searching how I could improve upon it. I marched upon audiophile forums, and my dear, there be dragons of insanity[^10], but not everything audiophiles say is nonsense. Over 20 years ago, in the high school studio, there was a patch board with printed circuit boards. I have witnesses, including musicians, that plain those circuit boards with nothing but jack sockets on them can emit music if driven hard enough, for example the pre-amp output of an ancient Sound Blaster card. We didn't want to believe our eyes and ears, but there it was, so when amplifier engineers say things like "circuit board: bad" because "sound always moves", they are not incorrect. Another thing I can stand behind is some description of speakers: analytical vs musical. When we went to test some speakers we were shown a set of them first, and once finished listening, all I could say is that I hear every instrument, every detail - just not the music. That's when we were shown the Dali Oberon 5, which sounded much closer to our preference. Experienced audio engineers can provide valuable insights, like why listening to music on a lot of audio bricks[^11] gets tiring after a while[^12]. Also thanks to comparison videos from E Project[^13] because they made the choice much easier. *A detour: among the videos I came across a few which lead me down another rabbit hole: "Combination Tones"[^14] - the effect of how 2 higher pitched sound can generate a 3rd phantom low pitch sound in our ears, due to biology. Apparently an avantgarde artist, Maryanne Amacher, exploited this with her music[^15], but I'm not ready to listen to a piece to which people referred to "it had ghosts in it" just yet.* After much time spent on reading opinions, forums, listening to tests and comparisons between brands like Cambridge Audio, NAD, Audiolab, Rega, Yamaha, Marantz, etc. we decided that the sound we preferred, based on recordings, is NAD. The cheapest, simplest, and still AB class amplifier NAD sales is the C 316BEE v2[^16]: analogue line-ins, no digital boards - nothing that gets obsolete in a year when the next shiny-shiny comes out, so this is what we got. *Amplifier class doesn't matter; my reason for AB was that I wanted oldschool and simple.* *Sidenote: apparently, in Europe it's a law that banana plug sockets need to be plugged in when the appliance is sold, so one needs to remove the plugs first. That is because the EU power adapter fits the banana sockets, and vice versa... I wasn't aware of this, so I first removed the banana plugs themselves, only to learn that I could have simply pulled those socket covers out. And no, this is not mentioned in the manual at all.* Once the NAD was plugged in it far superseded my expectations. To keep it as simple as possible, we (my wife an me) both made the following observations: - there's a lot more clarity at low volume - before, we had to turn it up to hear the music and the small things in the music well, especially the bass. Now the music is clearer, even well below conversation level loudness. - the baseline hiss of the Topping is gone - the bass is in another league; compared to the Topping it's thundering, which is a good thing, and was one of the main reasons why we were told to get a decent amplifier with the speakers in the first place - the formerly muffled tones are now just as clear as the rest However, I want to stop here. "How to stop rewriting your site and write more"[^17] is a problem for us with websites, and searching for the perfect audio gear is a very similar problem. It's easy to keep going instead of enjoying the music. I'm joyous with the current setup and have no desire to seek thousands of pounds worth of gear, as after a certain point, one would need to spend orders of magnitude more money only to get a tiny bit better sound. But the hardware is just in element in the whole chain. There are many studies out there that most people can't tell the difference between a 320kbps MP3 and CD - and that is true if you're listening to a random song. It is most certainly not true when you're to listening to something you know from CD and the gear you're listening on is good enough. "The Smell of Rain" from Mortiis[^18] had an official "redux" mp3 release, which I listened to for years. One day, out of curiosity, I got a copy of the CD and I was speechless: there are sounds on the CD release I never heard before, it essentially introduced a new layer to me in the music. The lossy compression was hiding it all. We all got used to the limitations of our setups (*cassettes copied from a copy of a copy of a cassette recorded from FM radio... the good old days*) then later, to lossy music, and many of us have no idea what a decent, not even silly expensive setup (read: below £1000, newly bought), that's playing from CD is truly capable of. Coming to this realisation I decided to try Tidal, which does offer CD streaming quality, unlike Spotify - and yes, it sounds much nicer. And it also sucks, because the hacks that used to enable Tidal Connect on a Raspberry are now dead[^19] and the available hack to use it, like the upmpdcli plugin for Tidal is significantly less user friendly, like librespot[^20], which just exposes itself as a Spotify Connect speaker. Following the usability credo I needed something that allows us to use either Tidal or Spotify, and it came down to some sort of Chromecast. I soon learnt that Google used to sell a device called Chromecast audio[^21], but discontinued some years ago. It costs more used, than when it was new, yet it's still 1/3rd of the price of a WiiM Pro[^22] which seems to be the cheapest, audio oriented, Chromecast capable device currently on the market. When I plugged the second hand Chromecast audio in I thought I got played: there was a rhytmic noise, like a train. Turned out the device is fine: it was the low quality power supply I plugged it into. Apparently this little thing is cheap because it lacks a lot of filters and extras the more expensive devices have, so it really needs a nice, high quality power supply, preferable it's original. Nonetheless: it's sound quality is amazing. To me, it sounds better, than the Topping as DAC. **Update (2023-12-03)**: for now, I went back to Spotify. Tidal has weird issues, and it regularly had buffering problems. ## Controlling and browsing I miss the physicality of CDs, casettes, VHS tapes, but I admire how accessible endless collections of music had become. To keep my ripped CD collection usable I used to run MPD on some sort of capable device, because MPD clients had great interfaces to browse what's available. With this Chromecast oriented setup I had to find an alternative, which could do the same, and the answer was an Android app called BubbleUPnP[^23]. I don't like having to pay for software, but ever since I can afford donating or tipping, I'm happy to do that. Sometimes there are exceptions, and BubbleUPnP is one of them, because it's worth it. It's an immensely useful little app for Android that can act both as UPnP/DLNA control point and a UPnP media renderer. This means that it can play network media - or it can send it to something to play it. It can even transcode (!) if it needs to, so no need for the source to support transcoding. To me, this is important, because the backend is a minidlna[^24] server. It's as simple as it gets, and even some routers have it installed. No setup needed, it's all through zeroconf, and it just works. *Less of a plus is the lack of catalogue, covers for video files, or the ability to set age limits (Jellyfin has that). However: looking back at my childhood I could have watched movies recorded in VHS that were definitely not for me - I didn't want to. I wanted to see Star Wars for the 6000th time instead, so this may not pose as much of a threat as I think it could. Time will tell, I'll come back to this problem when the now \<2 years old has a phone and wants to watch Alien.* This was local audio and video can be browsed from any Android device in the family, casted or viewed locally, with no issues at all. ## Conclusions I have access to millions of hours of audio and video today, but that access' usability is definitely not on par with the simplicity of inserting a disc, a casette, or a VHS tape and simply pressing "play". Then there's also the loss of nice, physical album art, but that is another topic. If I was Windows or Mac oriented, my life would be simpler, and I could have simply dedicated a machine as media center, because on those systems, the streaming services are willing to show decent quality. If you're on Win/Mac, keep it simple, and use an older machine to do this, it'll make your life much, much simpler. MPD is a brilliant system for local music playback, and once set up, it'll probably run forever. Every and all hobby has rabbit holes, though some might be more expensive, than others - audio is dangerous, because there's always something nicer, more special, newer. Some audiophiles are simply mad, others have the curse of exceptional hearing. Audio is subjective. If you like it, it's OK. More expensive won't always or won't necessary make it better for you. The class of the amplifier will also not determine how much you like the sound. I always try to buy things that last, but with technology I tend to go cheap and tinker. Part of it is wanting to be in control, another is wanting to understand my stack. For local things where updating is not an issue and which don't need to connect to ever changing APIs this approach works, and it's even usable, but when it comes to streaming services where everyone tries to protect their turf the tinkered solutions will eventually break. If I want to avoid that I need to buy in to some of the solutions. Chromecast works as DLNA was meant to work, but it's closed, and it plays nasty with anything that's not android or Google based. It probably also syphons a stupid amount of semi-private data to Google, but regardless of this, I couldn't find anything that works overall better. I'm starting to dislike Rasbperry Pi based solutions. It's cheap board which is used for a lot of things it was never really meant to be used for, hacks on top of hacks. Sometimes getting the right tool for the right job is worth it instead of trying to apply a swiss army knife. The same goes for the lottery of wonders-of-the-internet products. The current Chinese audio brick rage is around Fosi and S.M.S.L. audio, like it was some years ago for Topping. Don't get me wrong: some of these products are absurdly good, but if not, you're out of your money. The price of an S.M.S.L. AL200 is more or less the price of the NAD C316BEE and the latter will be better made and will outlive the Chinese brick for sure. My Topping has already developed weird quirks, like it's flaky volume button, the rubbish from start remote control, and occasional freezing at which point it needs to powered off and on. ## Addendum #1: A Raspberry Pi with extras for local source playback There are ready made images for audio on Raspberry Pi, but Volumio[^25] , moOde audio player[^26], or rAudio[^27] all failed me at some point. Volumio is closed source, moOde and rAudio are open, but they all have one thing in common: a web based interface, which makes them incredibly slow on the Pi 3B. They also don't play nice with custom configurations for MPD, and none of them is ready for easy satellite mode config. This means that network shares had to be added on their web config, and it made them crawl- except for moOde, which just died after I added my NFS share. There are other, fun configuration issues. For example, on Volumio MPD set to hardware volume mixer, but Spotify Connect is still on softvol, so setting the volume on MPD sets a baseline for Spotify, but not the other way around. However, if the goal is simply local playback: - Raspberry Pi OS Lite - MPD - and either an external DAC (in my case, the Topping MX3) or an I2S hat gives you a rock-solid playback system, that is once setup, will probably run forever. In case you want to turn MPD into a DLNA client, there's a beautiful little software, called upmpdcli[^28] that can do that. It worked quite nice. This was my MPD config with the Topping: `/etc/mpd.conf` ``` apache music_directory "/path/to/music" database "/var/lib/mpd/database" playlist_directory "/var/lib/mpd/playlists" log_file "syslog" pid_file "/run/mpd/pid" state_file "/var/lib/mpd/state" sticker_file "/var/lib/mpd/sticker.sql" user "mpd" group "audio" bind_to_address "0.0.0.0" log_level "error" input { plugin "curl" } decoder { plugin "hybrid_dsd" enabled "no" } decoder { plugin "wildmidi" enabled "no" } audio_output { type "alsa" name "MX3" device "hw:CARD=MX3,DEV=0" mixer_type "hardware" mixer_device "hw:CARD=MX3" mixer_control "PCM" } filesystem_charset "UTF-8" ``` ## Addendum #2: Spotify Connect with raspotify If you want to stream: raspotify[^29] works fine for Spotify Connect, but there's no telling, how long, given it's a reverse-engineered, unofficial solution. `/etc/raspotify/conf` ``` apache LIBRESPOT_AUTOPLAY= LIBRESPOT_DISABLE_AUDIO_CACHE= LIBRESPOT_DISABLE_DISCOVERY= LIBRESPOT_BITRATE="320" LIBRESPOT_FORMAT="S16" LIBRESPOT_SAMPLE_RATE="44.1kHz" LIBRESPOT_DEVICE_TYPE="speaker" LIBRESPOT_DEVICE="hw:CARD=MX3,DEV=0" LIBRESPOT_BACKEND="alsa" LIBRESPOT_MIXER="alsa" LIBRESPOT_ALSA_MIXER_DEVICE="hw:CARD=MX3" LIBRESPOT_ALSA_MIXER_CONTROL="PCM" LIBRESPOT_USERNAME="$SPOTIFY_USER" LIBRESPOT_PASSWORD="$SPOTIFY_PASSWORD" LIBRESPOT_INITIAL_VOLUME="50" LIBRESPOT_VOLUME_CTRL="linear" LIBRESPOT_ONEVENT="" TMPDIR=/tmp ``` ## Addendum #3: Using the Topping MX3 as DAC or pre-amplifier Do not believe Reddit experts[^30]: yes, you can use a Topping MX3 both as pre-amp and for line-in level, but keep this in mind: - for line-in you **must** set the volume to maximum `-10dB` or `56` because anything higher is above line level[^31] and will overdrive the input - as far as I understand `0 db` or `76` it meant for when one connects it directly to a power amplifier To change between level and dB display, press Mute then Mode on the remote. ## Addendum #4: failed attempts ### Kodi[^32] on Raspberry Pi 3 {#video-and-audio-kodi33-on-raspberry-pi-3} I have two Raspberry Pi 3 Model B Rev 1.2 -s. These things supposed to have both h264 and h265 hardware decoders, but as it turns out, this got messed up because some the decoders are closed source. This means no Kodi beyond 18 if hardware acceleration is needed for HEVC (aka x265).[^33]. This wasn't my only problem: Kodi turned out to be utterly unusable with my music collection, mainly because there is no folders/file view. It was slow and miserable to use with Kore, on the web, on the TV, basically in any way. There is a Spotify Connect addon that worked though, but nothing for Tidal. ### Jellyfin server[^34] with Jellyfin app on Chromecast {#audio-and-video-jellyfin-server35-with-jellyfin-app-on-chromecast} Everyone loves raving about Jellyfin, but they all forget one thing: it loves to transcode. My ~~low powered~~ energy efficient server(s) don't, and because of the aforementioned lack of DivX support in Google TV[^35] no native playback is possible for those kind of files without transcoding, meaning this setup is a no-go. ### Chromecast with Google TV with USB-C hub and the Topping MX3 as external DAC One of the hacks I tried was to connect the Chromecast with Google TV to a USB-C hub that had PD passthrough charging and an external DAC. Unfortunately Android 12 doesn't want you to do that[^36][^37] and so it sometimes breaks rather randomly. While there's MPD server[^38] app for the Google TV that works flawlessly in satellite mode[^39], because of HDMI CEC it kept turning the TV when the music started playing. There's also no working MPD client for the TV, so while it was playing music, there was no way of stopping it from the Chromecast. ### An Android tablet with USB-C hub and an external DAC I learned it the fun way that Spotify Connect only works for the very account you log in with on the tablet - it's not like the Chromecast or librespot, where anyone on the network could do it, so this was dropped as well. [^1]: https://en.wikipedia.org/wiki/Enshittification [^2]: https://developers.google.com/cast/docs/media [^3]: https://www.hifiengine.com/manual_library/panasonic/sa-ak18.shtml [^4]: https://www.tpdz.net/productinfo/398300.html [^5]: https://www.musicpd.org/ [^6]: https://dtcooper.github.io/raspotify/ [^7]: https://www.dali-speakers.com/en/products/oberon/oberon-5 [^8]: https://store.google.com/gb/product/chromecast_google_tv?hl=en-GB [^9]: https://antonioforcionenaim.bandcamp.com/track/landmark [^10]: https://iiwireviews.com/category/reviews/snake-oil/ [^11]: https://www.androidbrick.com [^12]: https://www.youtube.com/watch?v=hRxYNbgHpxQ [^13]: https://www.youtube.com/@eprojectEllie [^14]: https://www.youtube.com/watch?v=73_CiAYX00k [^15]: https://www.youtube.com/watch?v=SwYaL-QlCKQ [^16]: https://nadelectronics.com/product/c-316bee-v2-stereo-integrated-amplifier/ [^17]: https://indieweb.org/2023/Nuremberg/write [^18]: https://en.wikipedia.org/wiki/The_Smell_of_Rain [^19]: https://forums.raspberrypi.com/viewtopic.php?t=297771 [^20]: https://github.com/librespot-org/librespot [^21]: https://support.google.com/chromecast/chromecastaudio?visit_id=638341182298633413-569899589&hl=en-GB&rd=1#topic=6279364 [^22]: https://wiimhome.com/wiimpro/overview [^23]: https://xdaforums.com/t/app-7-0-v4-2-1-bubbleupnp-upnp-dlna-chromecast-control-point-and-renderer.1118891/ [^24]: https://wiki.archlinux.org/title/ReadyMedia [^25]: https://volumio.com/en/ [^26]: https://moodeaudio.org/ [^27]: https://github.com/rern/rAudio [^28]: https://www.lesbonscomptes.com/upmpdcli/ [^29]: https://dtcooper.github.io/raspotify/ [^30]: https://www.reddit.com/r/audiophile/comments/jnav7y/honest_question_can_you_use_a_topping_mx3_as_a/ [^31]: https://en.wikipedia.org/wiki/Line_level [^32]: https://kodi.tv/ [^33]: https://wiki.libreelec.tv/hardware/raspberry-pi [^34]: https://jellyfin.org/ [^35]: https://jellyfin.org/docs/general/clients/codec-support/ [^36]: https://piunikaweb.com/2022/11/25/usb-audio-routing-on-chromecast-not-working-after-android-12/ [^37]: https://www.googlenestcommunity.com/t5/Chromecast/USB-Audio-routing-broken-after-Android-12-update/m-p/263147 [^38]: https://f-droid.org/en/packages/org.musicpd/ [^39]: https://mpd.readthedocs.io/en/stable/user.html#satellite