I had a mini-epiphany last night as I was finalizing the ripping process on my CD collection. I re-rip my entire collection periodically, primarily to standardize the filename structure which gets sloppy over time, but also to reassure myself that my music metadata is up to date and accurate. For example, a few of my blink-182 albums were initially ripped with the artist name "Blink 182" which is not the proper form for the band name. Similarly, .moneen. is a band with a peculiar name which I often normalize as "Moneen" when I really shouldn't. Ultimately, band synonyms in will be handled in Blare either manually or through a continually updated online database similar to CDDB.
(In fact, as I've thought about it, the depth of information I want to provide about each individual song is much more than most people would be willing to invest into their media library, so an online database seeded - through an opt-in process - by the most devout information-obsessed audiophiles might be the way to go.)
But my epiphany has little to do with the filesystem structure of my music, and more to do with competing media players. When my music has been ripped as FLAC and then converted to mp3 for typical usage I'm left with a quandary which no media player has yet to handle: changing sources of media. Winamp and iTunes, the two media libraries I use most often, both offer a fair amount of metadata including things such as "Last Played Time" and "Play Count" and even "Skip Count" but that metadata is tied to that specific filename not that specific song.
This causes a problem for me because my music is particularly structured to aid in frequent updates on the filesystem. This is why my Music directory is subdivided into four main directories: Downloaded, Old, Torrented, and Ripped. Downloaded includes various individual tracks I download from sites which have no associated album such as demo tracks or the "Still Alive" song from Portal. Old is the repository for my album-less collection of music I maintained before I started ripping and downloading albums as a whole. And finally Torrented contains all the albums I've torrented over the years which over time get replaced by CD-ripped versions in the Ripped directory.
I like this directory structure because it maintains a coherent basis for the source of my music. Though this has gotten extremely muddy as FLAC torrents become more readily available, it's still manageable. Where it causes problems is when media libraries come in. All the nice metadata they have about my music gets obliterated if I re-rip the album with changed values for track names, album names, or artist names (My directory structure below my four main directories is "[artist]/[album]/[artist] - [tracknumber] - [title]") or if I buy the album and replace the torrented version with a ripped one. I could go through the effort of manually rewriting the libraries to point to these new files or, in the case of iTunes anyways, modify the library file through some string processing script custom designed for my purposes, but updating music shouldn't be that hard.
By and large, people only have one copy of a song. If there are numerous copies of the same song they are usually different (live versions, pre-album unfinished versions, etc.) and if they aren't then the library should be able to understand that and use the same song data for both while maintaining unique track information for each version, something which Blare hopes to accomplish. (Of course, while they should appear as two unique songs in a playlist, their internal metadata (Play Count, et. al.) should propagate across identical copies).
I know that people are loyal to their media players, so rather than purely fix what wrong with everything else, I think helping everything else should be a part of Blare as well. I already plan to have a library capable of handling new forms of data via plugins, so I think the next logical step is to allow linking Blare's more robust library to any other player willing to expose the capability to do so. With Blare at the core of your music. You would be able to open a track in winamp, and the play count would be updated in Winamp's internal library which would also update Blare's internal library which would then propagate out to any other linked libraries.
I also have some ideas about a good technique for having the same media file being accessed from multiple locations while retaining independent track information per instance (something which isn't possible with symlinks and the like) but this post is long enough as it is. I admit that I'm setting my sights high, almost absurdly so, but all of the things I'm talking about in these brainstorming blog posts are possible but no-one seems to have that much interest in making this sort of deep and rich media player, so I guess I've got to take the ball and run with it.
When I started thinking about this project, I wanted a great music player. I wanted deep and complex hierarchies that could be queried against to create new and interesting sorting techniques. And I wanted multiple methods of control. iTunes has slightly better metadata than other players I've used, but its user interface is far too strict and the lack of keyboard shortcuts, not to mention global keyboard shortcuts, limits its usefulness to me.
Winamp, my other primary player, has great usability thanks to the jump menu, track queuing, and the variety of global keyboard shortcuts, but its handling of metadata is lackluster despite the improvements in the media library over the last few years. Another great feature of Winamp is its variety of appearances; window docking, autohiding, skinning, and a plugin architecture that greatly extend its behaviour and appearance are all fantastic and I would love to have those features, or a close approximation, in a final product.
But still Winamp lacks one feature I desperately want included into future revisions, and I will have it in whatever application I create. That feature is mouse movement commands. Specifically, my favourite video player, JetAudio, allows you to program activities to the mouse scroll wheel; beyond this, you can program the scroll wheel to perform different actions with different modifier keys. I have mine set up to have volume controlled by the "naked" scroll wheel and fast forwarding and rewinding controlled by Alt + scroll wheel. I can't remember how I used movie players before but I know that I'm absolutely addicted to JetAudio, despite its poor support of Matroska, simply because of this feature. And it's not even handled particularly well.
So far, this is primarily a music player though I did add a feature from a video player I enjoy. But I slowly realized as I began to expand the network of connections that there are limitless possibilities. And there are limitless questions that need to be answered. Podcast organization and manipulation is one thing that no media player has right. Connecting music videos to the band and to the track and to the album is nowhere to be seen. Associating side projects based on related band members is a dream in the twinkle of organizational nerds' eyes. And forget about associating albums based on their producer, or on where the album -- or even the track -- was recorded.
And these are almost exclusively in the domain of music. When you start adding together movies, and TV shows, and the music in their soundtracks. And then adding on to that, movies and TV shows can often be related to novels and comics which need further integration. There are basic standards for reading comic books and novels online so integrating them into the media organizer is merely a matter of grunt work. But this is a hell of a lot of grunt work.
In my mind the best way to handle this is to create a system that can handle any media and implement a plugin system; then for the media I want to support and integrate directly, I simply create and install by default those plugins. Of course managing to maintain that level of generality on the core feature of the application is probably not possible. But I'm going to do my best to figure out a way to do it, and I'll start with music. And once I've got that working I'll expand into the limitless possibilities.
I've been thinking about, and complaining about, media libraries for a couple years. People I know are probably pretty sick of it by now, but my complaints never really change. Media doesn't change all that much and neither does the software that we use to organize it.
I don't have any lofty goals about replacing mp3 or avi or pdf or even txt. They're here to stay, but what I can do is provide a coherent, consistent, and extensive system by which it can all be organized. To begin, we need to actually be inclusive by default. As of now, the only thoroughly developed taxonomy has been developed for music. There are some systems which organize documents, and even fewer which deal with video files, and there are systems which deal as generically as possible with any and all media. There is a middle path between specialization and generalization that no program has yet to fill.
I have an idea. Originally, this idea was for a new music player, but as I expanded the basic idea I began to see how the interconnectedness of media necessitates a system which can handle said interconnections. Though, as much as the ultimate revision of this system requires universality, the first step is to conquer proper music organization.
The first thing we need to do is forget about the filesystem. Ever since I've had an appreciably sized media library I've organized it according within the filesystem so that there is an inherent structure even before a media library begins to categorize the data. It's useful but it locks you into the same limitations of e-mail folders; there is no single chain of categories by which all media can be organized. If a certain song appears in multiple albums but the content itself is identical, why should two unique copies of the song exist? Filesystems can support this, through symlinks and junctions to symbolically reference the same file from multiple locations in the filesystem, but it's not something which media libraries typically employ. That said, the filesystem is a part of the system and we can't ignore it. Apple decided to ignore the filesystem in the iPod by renaming all the music in your library to random hashes when moved over the your iPod. This is for obfuscation not for organization but the analogy applies. A good media library cannot mess with the filesystem... unless justified.
Once a reasonable solution to the filesystem problem has been resolved (I'm not saying I have one, just that you've got to get there to go anywhere), you can actually take advantage of it. If there is one song with two identical copies in your library, perhaps from different albums, the core music data should be the same for both. And if there are two versions of a song, shouldn't there be an association between the two? Once you've begun to consider associations between versions of songs, such as an album release and a version from a live album, you have to consider associations between the original song and covers. The chain of connections expands endlessly, with multiple artists, multiple genres, multiple albums, even multiple titles and changing band names. The edge cases are astounding both in their numbers and the ignorance they engender from virtually every existing system.
I'm still working this out in my head. It's jumbled and, at times, contradictory, but talking it out helps. When I have a coherent plan, the coding begins.
Hello and welcome. This site will slowly become my primary site. I've always been intrigued by drupal and its superiority to other content systems has been expounded upon by various people so I thought I'd take the plunge. At the moment, this site will primarily contain programming related posts as well as additional static pages related to my various interests. The two primary sections of static pages at the moment contain the greasemonkey scripts and javascript code snippets I've written recently.
As I become more comfortable with drupal I may move my personal blog over from wordpress. It may also be brought over here but I think that'd be a terrible waste of a domain, so my personal and professional endeavours will likely remain separate. I hope you enjoy what I've got to say about... whatever the hell I end up talking about here.