bliss and iTunes: first steps?
I've had it in mind for a long time that bliss's interoperability with iTunes is not what it could be. It's apparent you feel the same way It's true that I've prioritised other developments above an iTunes integration. I understand that seems an odd choice given iTunes is by far the most used software music player on the market, and is the "portal" through which much of the Apple music ecosystem is accessed. Let me explain why this is...
When I started out writing bliss I just envisaged a tool for people like me, where "people like me" was a necessarily small niche of computer music enthusiasts. Such people, I reckoned, were DIYers who wanted to construct a home music network from parts and would be likely to reject limitations imposed by Apple's tight vertical integration.
As the months and years have gone by it has become increasingly clear that my perception of the market was overly specialised. There are plenty, it turns out, of technically minded home music enthusiasts that use iTunes. All it takes it having an iPhone for starters! And, of course, there are lots of iTunes users who have the same problems other digital music collectors have in building and maintaining a complete, consistent and correct library.
What's the problem?
There are two main problems between bliss and iTunes right now; two main areas where they don't see eye to eye.
The first area is that, once bliss updates a file that is managed by iTunes, iTunes doesn't know that the update has occurred. So, bliss could embed new album artwork and it won't appear until you perform some magic tricks. Worse, if a file is moved by the bliss file organisation rule, iTunes loses track of the song permanently, and the file must be re-imported.
The second area is a data flow in the other direction. bliss has no way of interrogating iTunes for the metadata it holds about your music library. Most famously, this includes artwork which is stored in the iTunes proprietary database and is unseen by bliss. Some means of looking up data in iTunes would allow a more complete knowledge of your music library.
An improved integration
The first step is to rework bliss so it can update iTunes when music files have changed. This involves storing a record of which files iTunes knows about, and some form of identification of the files within the iTunes database. Once a given file has changed, bliss could prompt iTunes to re-read the file and update its records.
There are a number of challenges with this. How is iTunes communicated with? Different operating systems have different means of integration. Also, is iTunes only supported when it's on the same computer as bliss, or should cross-network communication be allowed? Finally, how should the iTunes library to synchronise with be identified in the first place? Co-location may allow some form of auto-discovery, which would be ideal.
Going further, it would be good if we could also find data about the music in iTunes and display and manipulate this. The challenge here is coping with inconsistencies between the iTunes data and that in the music files themselves. How is the source of the metadata communicated? For example, if artwork is embedded in the music files but is subtly different to that in iTunes (maybe slightly larger or brighter) we want to be able to demark the two to allow synchronisation.
In this case, the best first step is to start with the most requested functionality, in this case the ability of bliss to update iTunes automatically when it has performed some work.
The minimum work to achieve this is to investigate if it is possible to not read the library from iTunes, but from disk as now. Then, when a given file is updated, communicate with iTunes about which file was updated.
Later on, we can look into extracting more data from iTunes and begin to manage an iTunes library in the same way a file-only library can currently be managed.
In general, one guiding philosophy will be to maintain the status of a music file as being the "gold" authority source of data.
Thanks to Geoff Stearns and flashbak for the image above.