I've reached the point where I want to write my own music player (it comes to us all). However, all the things I want to do are UI-based; it would be daft for me to have to reimplement managing a library, reading ID3 tags, creating playlists, and so on. Therefore, what I'm looking for is a music player which doesn't present a UI (or can have that UI hidden) so that I can implement my own entirely custom UI without having to build all the infrastructure as well. This "underlying" music player might be a curses interface with a remote control socket protocol; it might be a library with Python bindings; it might be a Gtk app which takes an option to not present its GUI and can be controlled over D-Bus... I don't know.
Things I non-negotiably want this "back end" to do:
- Be remote-controllable from a Python program. (As mentioned, I'm open to lots of methods of remote control; a socket, D-Bus, a CLI tool, whatever)
- maintain a library of music - that is, scan my music for metadata and be able to address music by that metadata (so I can search for "beatles" and find tracks, not just those which match on the filename)
- monitor a folder for changes and load those changes (new files, altered files, deleted files) into the library without having to be told to do so
- let me provide my own GUI (hence the need for remote-controllability)
Things I'd really, really, really like but which aren't strictly necessary:
- Ubuntu sound menu integration
- Be packaged for Ubuntu already and in Software Centre
I've looked at a few alternatives and rejected them, but I might be wrong: if I'm wrong about any of these, do please correct me.
- cmus: cannot monitor the library for changes (needs to be prodded with update command). Also, AFAICT the remote control is primarily to make the curses interface do things; it's hard-to-impossible to use the remote control to say "give me a list of all songs matching 'beatles'"
- mpd (and some client): cannot monitor the library for changes (needs to be prodded with "update" command)
- moc: cannot monitor the library for changes
- banshee (and banshee's back end, Nereid (?)): as far as I can tell, can't be controlled by a Python program: I'd need to write my new front end in C#
- rhythmbox, guayadeque, audacious, quodlibet, clementine, noise, beatbox, deadbeef, gmusicbrowser, xnoise: can't turn the GUI off and replace it with my own
So, I'm looking either for explanations of how to do what I want with the above, or suggestions for alternative tools that I could use instead of those!