Tom MacWright


Update: This post was published in 2012. As of 2017,
  • heard is no longer developed or available.
  • I use Swinsian for listening to music now, not iTunes. My music setup is described in prepper-style music hoarding.

heard is a native Mac application that sits in your menu bar and records what you listen to in iTunes.

It’s the small part of that I want. It records when you start a song, how long the song is, the artist, et. cetera. It’s anti-social, has nothing to do with the cloud, and the use case is less precise than ‘social sharing and discovery’: the main end-product is the ability to export your songs to JSON.

The Glory Days Of Audioscrobbler +, Tinfoil Hats

I was an eager user of Audioscrobber, which became, until it was acquired by CBS music group and then the founders left and then there was all kinds of drama about them possibly forking over data to the RIAA. The tinfoil-hat wearing users with iTunes libraries not entirely purchased from the iTunes Music ‘Store’ understandably ran away. That and the new features they tried to implement, like streaming and subscriptions seemed like a money-making proposition for the Pandora-listening audience rather than a feature for data-hoarding programmer-types like myself.

But, to their credit, was released as open source (and provided the ‘aha’ moment for how to get heard to work). Plus, Lastgraph introduced the world to the streamgraph, later made accessible by d3js.

Oh My God I Am Terrible

This app took a really long time to write. An embarrassing amount of time.

I’d really recommend writing Mac apps, even though (possibly because) the experience invokes unending puzzlement and rage. It’s not as wild as writing in lisp or Factor, but it’s practical, mind-bendy, infuriating, and guaranteed to take you out of your comfort zone.

Initially heard wrote CSV files, like minute does. But then switched to Core Data. It started without any libraries, and eventually acquired Underscore.m, with the attendant CocoaPods dependency. Minute was written before Automatic Reference Counting, so I had to relearn properties and memory management. Something as simple as opening an About window took hours of trial to find the three-line implementation that works.

A song recorded by heard:

  "album" : "On The Water",
  "artist" : "Future Islands",
  "duration" : 291526,
  "id" : "-1183402847677178919",
  "minute" : 1346294601.155178,
  "name" : "On The Water",
  "rating" : null


Like minute, heard is open-ended: it produces simple data that can be easily charted with d3js, raphael, or whatever you have handy.

A few examples of graphics would be the treegraph I made for my recent ‘Recently’ post:

a song chain, a simple force-directed graph:

And this quick song duration histogram:

Champagne for My Real Friends

There are a few turning-point aha moments.

  • Justin helped out tremendously with my dumb questions.
  • Cocoa with Love explained the whole ‘application support’ folder thing.

Get It

This is open-source software, and it’s free. It isn’t ‘signed’, so you’ll need to either right-click (or control-click) and click ‘Open’, or turn Gatekeeper off if you’re using Mountain Lion.

It almost certainly has bugs and could use lots of refinement. Head to the issue tracker if you’ve got something to report, and file a pull request if you’ve got something to contribute. It’s the tmcw/heard project on GitHub.