Introducing Project: Moo
Why isn’t the iterator MoveNext()ing?
The thread was blocked for a while. Here we go again.
Domain: Digital DJ’ing
One of my recreational pastimes includes DJ’ing. I started out the old-fashioned way, playing round black slabs of vinyl, and did so for quite a few years. Eventually the great reform of the music biz caught up and I, somewhat reluctantly, went digital. I still use vinyl records for controlling the digital tracks I play out at gigs.
The setup I use is Native Instruments’ rather nice product called Traktor Scratch. It consists of an audio interface that gets plugged between the mixer and the turntables and a software that plays the actual digital audio files. The idea is that you place a special vinyl record with a time signature track recorded on it on the turntable, the time signature then gets played into the software via the audio interface, and the software then proceeds to play out tracks matching the speed and location of the vinyl. In effect it’s basically like having MP3 files on your vinyls.
The advent of these DVS (Digital Vinyl System) packages has – for me, at least – changed the dynamics of performing somewhat. In the yesteryear, a considerable amount of time would be wasted browsing through the crate, looking for that specific record. A search field in the DVS software’s library GUI has replaced the crate-digging, making it really easy to find specific tracks, but harder to go by intuition. That is a paradigm shift that I – after almost 2 years of gigging with a DVS system – haven’t gotten used to. This, I believe, is an issue that the DVS vendors should try to address.
Another challenge is keeping your MP3 files organized. If you only use your laptop for DJ’ing, it’s pretty easy to just shove your files into a directory and let your DVS software take care of cataloging them. I – like many others – do use my laptop for other stuff as well: like listening to podcasts and music that I don’t incorporate into my DJ sets. A DVS software isn’t actually a user-friendly way to listen to music casually and manage podcasts.
This calls for a gentle balance of using a DVS software for the DJ stuff and, say, iTunes for the other stuff. That’s all fine and good in theory, but when your libraries start to overlap, it becomes a bitch. And they will. Traktor Scratch has a rudimentary support for iTunes library integration, but in effect it always ends up bloating your DVS library with the latest Stack Overflow podcasts and Lamb Of God albums.
Then there’s the problem of dealing with considerable masses of individual MP3 tracks: applying genres, classifying, creating playlists, general cataloging biz. The stuff you do to battle the loss of intuition in selection. To date, I haven’t seen an MP3 player that makes it easy to apply a genre to 10 tracks and create a playlist of 15.
Enter Project: Moo
The idea of a media library / MP3 player for this distinct niche has been bouncing around in my thinkbox for some time now, but I finally got XCode fired up and started hacking at it this week. My original thought was to go at it with the approximate technology palette of RubyCocoa and CoreData, but after some 4 days of programming I’m starting to arrive at the conclusion that learning your ways around new technologies via a Objective-C bridge is a bit of a pain-in-the-poopshoot. So I think I’ll be rewriting the stuff I’ve got together so far into Objective-C. Should be interesting.
The approximate feature outline of the first-ish release should be something along the lines of:
- Playback of MP3, WAV, AIFF and FLAC if it isn’t a complete bitch to implement
- Minimal user interface relying heavily on the keyboard, for fast bulk editing
- Applying arbitrary classifications for tracks: pretty much an extension to genres. A track can belong to several classifications but only one genre.
- Playlists
- The ability to create symlinked pools of tracks, classifications and playlists. The idea is that you can keep your DVS library pretty much clear and load up a directory of symlinks that you control with MOO
- Podcast subscriptions
- Insane abundance of doesn’t-cost-a-penny-but-do-donate-if-you-don’t-want-me-to-go-thirsty
Further iterations might or might not include:
- Scriptability. Might even be pretty early in the roadmap, given the head-start the Ruby-Objective-C bridge gives.
- Visualizations. But then again who gives a fuck. Would be a nice exercise for the brain-banana to implement, though.
- WPF port
This, of course, will probably take some time, given that I don’t know KLONK about Cocoa. Stay tuned, however. This might actually evolve into something, considering the surprising vein of inspiration I seem to have struck.
Feel free – all 3 of you – to suggest features. If your ideas are relevant to the domain I might even consider implementing them. Remember, though, that this is a personal technological venture first and a software product second. But if this thing does catch wind, the focus could do with some adjusting.
I’ll try to blog during the process. Might even publish some source code shiznit if I think I’ve actually managed to stumble upon some release-worthy code. The basic idea would probably hover around Cocoa development from the perspective of an experienced Microsoft developer.
Why is it called Moo, then? Fuck if I know. Cows say Moo. Cows are stupid.








