The developers of beets, a command-line music library organizer, write about the tool and technical issues like SQLite and filename encoding.
Commenters strongly recommend beets for tagging and managing music libraries, praising its flexibility and MusicBrainz and Discogs support.
Yeah, the goal was (rather, is---I'm still working on it!) to learn more about real-world Haskell by actually learning how to use packages and forcing myself to read the Hackage docs, so for this project I pretty liberally import a new library whenever I need something.
The "req" package is very intuitive to use for requests, and plays nicely with "aeson" for parsing JSON. I'm also using "persistent" to manage a sqlite database.
For project ideas, try to scratch a personal itch. If you're solving a problem (or a daily frustration) that's important to you, you'll be more motivated to follow through! For me, I had been using the beets (https://beets.io/) command line tool to manage tags for my music library, but it isn't really optimized for my use case, and I thought I could do better. So I decided to write a cli [1] with Haskell to tag all my local music files with metadata from Discogs/MusicBrainz, modeled after the beets tagging loop. I'm also working on a more advanced tagging system that uses Datalog inference rules, inspired by a blog post [2].
[1] https://github.com/benrbray/borscht-hs
[2] https://dodisturb.me/posts/2018-12-25-The-Essence-of-Datalog.html
It's annoying how the author mentions "artists getting paid fractions of pennies per stream" along with buying from Bandcamp but doesn't describe how they integrate music from Bandcamp into their collection, instead linking to programs that seem designed exclusively for downloading from torrents and usenet.
I also have a Navidrome setup that is my main music streaming method which I've used for a few years now. I buy from bandcamp quite often and downloading and importing music from bandcamp (and managing metadata generally) is the most tedious part. I use beets[1] and if I buy, say, a mix of 10 tracks and albums, I then get 10 URLs and I have to download and run `beet imp` on each mp3/zip file. I do this over SSH with a bunch of copy-pasting since I haven't convinced myself it's worth the time[2] to change my method. It looks like there's some way to scrape bandcamp and automate this process based on the existence of this tool, bandcamp-dl[3]. If anyone has their own method to suggest I'd appreciate it.
[1]: https://beets.io/
[2]: https://xkcd.com/1205/
[3]: https://github.com/Evolution0/bandcamp-dl
There are other big areas where it's seriously lacking content:
1) Modern contemporary electronic music, which is usually available vinyl only.
2) Classic albums in their original form. When there's a remaster, Spotify typically only has the remaster, original was either never there or will be removed when remaster is out.
Now, when you start to invest to your sound system even a bit (not talking about 100k wires here), you notice the lack of dynamics in many remasters. The originals just sound better with good soundsystem, not so much with below-average systems.
When I listen to music, I like to have the best possible master from it. And preferably lossless, or that I have the control of the compression parameters and format. I guess Spotify will take the masses, but I'm not the only serious listener who prefers my own files and physical copies.
Streaming is handy, but you can do a lot of things already with big hard disks with your computers, some syncing NAS system (as in Synology), beets[0] and a big enough microSD in your phone.
[0] http://beets.io/
I can't recommend https://beets.io/ strongly enough for managing your library.
It's nice to have a single source of truth for tags and all in the same format.
Only downside is you will need a player app that supports album-artist tags; notably this disqualifies all gnome players, as the gnome library for managing metadata does not support album-artist(!!). I use cmus on linux and GoneMad on Android.
[edit]
Nepomuk (the gnome ontology) seems to have an albumArtist field[1], not sure why gnome-music doesn't seem to bring that out.
1: https://gnome.pages.gitlab.gnome.org/tracker/docs/developer/nmm-ontology.html?gi-language=c#musicalbum
I also do, with the substreamer app organizing my music with beets[2]. And it's great, especially with smart playlists[1] concept shamelessly stolen from iTunes (I mean this in a good way).
But for audio books, I did not find an app, that is free, does not crash and supports earphone remote like iPods do (I tested audiobookshelf, smart audiobook player and many many others) :-)
For going to bed or taking a walk I still love my distraction free, remote controllable iPod Nano 7.
1: https://github.com/navidrome/navidrome/issues/1417 2: https://beets.io/
I just use Plex hosted on a Raspberry Pi, and Plex Amp. I download mp3s from Bandcamp/wherever, and use beets [0] to auto-tag.
EDIT: FWIW, I don't recommend most people host their own music. Spotify/YouTube music is easy to use and has most music people want to listen to. I only self-host because I'm the type of person who has built a collection of mp3s since 2005, and the few times I tried switching to Spotify, I would commonly not be able to find specific things I wanted to listen to.
[0] https://beets.io/