2024-04-05 New device and local music streaming
As I'm getting older I noticed there are two things I absolutely
can't stand anymore: cables and fan noise. Last year I go my hands
on a 2013 Sony Vaio with 4 Gigs of RAM. Yes, by modern standards
this is an absolute potato but as I'm doing nothing computationally
expensive on my machines it didn't bother me that much. Except for
one thing: playing videos in Firefox. Well, it works but the fans
start to spin up immediately. Most of the time I would just download
videos and watch them with mpv but it was still a major annoyance.
Also last year I got myself a budget Android for 70€ and when I used
it watch a video in Fennec (a Firefox fork) I was quite astonished
that there were no hiccups, no overheating of the device and of
course no fan noise. So it was possible even on the shittiest
semi-modern device I could get. In that moment I swore to myself
that I would never again buy a laptop with active cooling.
So what are my options in early 2024? Apple silicon? Absolutely
fucking no... Well, there are new Qualcomm chips[1] on the horizon
but until these are widely available (and even more important Linux
compatible) I would have to wait another year. So why not get an
Android tablet and attach a Bluetooth keyboard to it? OK, mobile
devices are basically made for spying on the user but nothing is
perfect. Long story short: last month I bought a Xiaomi Pad 6,
debloated it as much as possible, installed F-Droid, installed a
firewall[2] and blocked every process trying to phone home. This has
to suffice. One can really go overboard with privacy paranoia.
Everything worked out fine but I had no good solution for listening
to my music collection. Yes, I could just copy everything to the
device itself but I toyed with the idea of network solution for
quite some time. I had a spare Raspberrypi laying around so setting
up a little server was quickly done. The Android side was more
problematic. First I tried streaming music from a mpd instance
running on the server. This worked but delays of ~20 seconds when
changing a song were not acceptable for me.
Then I learned rather quickly that on Android you cannot mount
Network shares in any file manager, at least not without being a
pain in the ass. I also tried it in Termux with no luck. Then I
found a blog post from a guy with a rather strange setup running mpd
locally on a smartphone and streaming over HTTP from the web
server[3]. Didn't work for me.
Next idea: create a NFS share on the server and access it with VLC
(Video Lan Client). This actually worked but I don't like VLC and it
just didn't feel right to me. For example I had to add an option
called "insecure" to my NFS share configuration for VLC to actually
find it. Not that it would matter much but there had to be a simpler
solution.
If you just spin up a web server with directory listing enabled you
can listen to individual music and audio files via the browser
without much hassle. The only problem is I need a flat playlist and
continuous playback. Some time ago I saw guy on YouTube adding a
HTTP file source to Kodi as alternative to Jellyfin. I tried this
but I did not like the Kodi app. It's huge and sluggish and I don't
want it to scrape the web for meta information (which is its main
selling point, I guess). After waiting for 15 minutes for Kodi to
unsuccessfully process a folder of ~40 files I gave up.
Next I began dabbling with a program called Navidrome[4] which also
kinda worked but the web interface was very cumbersome and every
subsonic compatible app on F-droid was also annoying as fuck. I
don't care for ID3-tags and I don't care for cover art. I want a
list of file names to click on. Heck, I don't even have a consistent
naming convention for my files. I just don't care about that shit
just play the fucking files randomly and in an endless loop.
So back to square one. I really wanted a low-tech ghetto-style
solution for this. So I have a simple web server[5] set up. How do I
turn a directory listing into some sort of playlist? I know that in
HTML5 you can embed media files and control them via Javashit.
Surely there has to be a ready-to-go web app for this use case.
After looking through some GitHub projects I found this simple HTML5
audio player[6]. I wrote a little shell script to insert the paths
to all my audio files directly into the HTML index file.
I had to fiddle a bit with the paths but no biggy. Then I tweaked
the style sheet so the player takes advantage of the full screen
width and height. After starting the web server in the right
directory the web player is accessible at
http://raspberrypi.local:8080/webplayer in my local network.
There are some minor drawbacks to this approach but it is just good
enough for me. It is simple, static, lightweight and easy to set up.
I like it and I also liked ranting about the minute details of this
trifle :^).
Footnotes
~~~~~~~~~
[1]
https://www.qualcomm.com/products/mobile/snapdragon/pcs-and-tablets/snapdragon-x-elite
[2]
https://rethinkdns.com/
[3]
https://www.joram.io/blog/android-streaming-mpd/
[4]
https://www.navidrome.org/
[5]
https://github.com/emikulic/darkhttpd
[6]
https://github.com/likev/html5-audio-player